Commit 677ddaa
feat: implement PAM Slack integration and policy v0.7 (#4)
* Remove webapp resources from shared GKE
- Delete webapp-team.tf from shared-gke module
- Webapp team now uses their own project-specific clusters
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Archive shared GKE infrastructure
- Moved 2-shared-gke to archived/ directory
- Shared GKE clusters have been destroyed
- All workloads migrated to project-specific clusters
- Projects remain with deletion protection
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* Clean up redundant and experimental code
- Archived 3-shared-gke directory (no longer needed)
- Moved test and migration files to archived/
- Removed old terraform state backup
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* Remove archived directories - cleanup complete
- Removed all archived directories and their contents
- Shared GKE infrastructure fully removed
- Migration scripts and test files removed
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* Add Tailscale organization-wide setup to GCP compliance framework
- Integrated Tailscale module into org-level Terraform configuration
- Creates dedicated project under shared-services folder
- Stores auth keys securely in Google Secret Manager
- Deploys subnet routers in US and EU regions
- Supports automatic Secret Manager retrieval in startup script
Key features:
- Organization-wide network access permissions
- Advertises all private ranges (VPC, GKE pods/services)
- Secure auth key management with Secret Manager
- Comprehensive deployment guide with ACL examples
- Supports both initial deployment and key rotation
This enables secure access to all GCP resources (including NodePort services)
without traditional VPN, using modern zero-trust networking.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add OAuth automation for Tailscale - no more manual key rotation!
- Implemented OAuth-based automatic key rotation
- Cloud Function generates new auth keys monthly using OAuth API
- Cloud Scheduler triggers rotation on 1st of each month
- OAuth credentials stored securely in Secret Manager
- Added comprehensive setup guide with step-by-step instructions
Key components:
- tailscale-oauth.tf: OAuth infrastructure and automation
- Cloud Function in Python for key generation
- Device authorization option as alternative
- Detailed troubleshooting and monitoring guidance
This eliminates the need to manually rotate auth keys every 90 days.
The system will automatically generate and deploy new keys monthly.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Remove Tailscale infrastructure
- Deleted all Tailscale-related Terraform configurations
- Removed Tailscale projects and resources
- Cleaned up variables.tf to remove Tailscale-specific variables
- Kept CMEK compliance requirement disabled as requested
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add organization-level groups configuration and security phase
Organization changes:
- Add groups.tf for centralized group definitions
- Add variables for domain and audit access control
- Grant org-wide viewer to developers group
- Grant billing viewer to auditors group (optional)
Security phase (2-security):
- Add PAM configuration with simplified 4-group structure
- Implement break glass emergency access for admins
- Add deployment approver elevation for approvers group
- Configure just-in-time access for all standard operations
- Set up notification channels and audit logging
This establishes the foundation for organization-wide zero-standing
privilege with clear separation between infrastructure admins,
deployment approvers, developers, and auditors.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: standardize nonproduction terminology in organization main.tf
Update comment to use "nonproduction" instead of "non-production"
for consistency with other terminology updates.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement GCP Break-Glass & Change-Management Policy v0.3
- Add comprehensive policy document covering all change lanes
- Update PAM configuration to require dual approval (no self-approval)
- Replace owner/admin roles with specific permissions for break-glass
- Consolidate and standardize documentation across repositories
- Remove redundant approval guides from webapp-team-app
- Align security phase with new policy requirements
- Add role mappings for Prod Support, Tech Leads, and Tech Mgmt
Key changes:
- Break-glass now requires 2 Tech Mgmt approvers
- All PAM notifications go to gcp-admins group
- Security reviews enforced via CODEOWNERS
- Integration points for Opal/Sym JIT platforms
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update to GCP Break-Glass Policy v0.4
- Clarify Google PAM as primary platform (not Opal/Sym)
- Add Cloud Function integration for Slack notifications
- Update retention periods to 400 days (from 1 year)
- Add glossary section with key terms
- Create detailed PAM break-glass runbook
- Specify TTL by lane (30-60 min)
- Add requirement for lock-file dependency review
Key changes from v0.3:
- Platform clarification: Google PAM + Cloud Functions
- Detailed runbook: runbooks/pam-break-glass.md
- Retention alignment: 400 days for audit trails
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement GCP Break-Glass Policy v0.4 requirements
- Updated BigQuery retention from 90 to 400 days
- Aligned PAM TTL windows with policy (30-60 min per lane)
- Renamed entitlements to match policy lanes (jit-deploy, jit-tf-admin)
- Configured all entitlements for dual approval
- Added Cloud Function for Slack integration (#audit-log)
- Updated break-glass to require 2 Tech Mgmt approvers
- Created PAM break-glass runbook with procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: address deployment issues for policy v0.4
- Add missing APIs (cloudfunctions, pubsub, artifactregistry, cloudbuild)
- Fix BigQuery KMS permissions for encryption
- Update group references (use gcp-admins instead of non-existent groups)
- Remove unsupported PAM features (service account approvers)
- Add notification rate limit for alert policies
- Update all approvals_needed to 1 (Google PAM limitation)
Note: Dual approval requirement documented in policy but PAM currently
only supports single approval. Will revisit when Google adds support.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update to GCP Break-Glass Policy v0.7
Major changes in v0.7:
- Added new groups structure with 5 distinct roles
- Introduced Project Bootstrap Workflow (Lane 4)
- Added detailed Org-Level Infrastructure workflow
- Specified failsafe account (u2i-failsafe@google.com)
- Expanded audit artifacts to include project bootstrap
- Added billing/finance role for cost management
- Clarified everything-as-code approach
Note: Failsafe account roles (Org Admin, Project Creator,
Billing Admin) to be maintained as specified.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement policy v0.7 group structure
- Added new 5-group structure per policy v0.7
- gcp-developers: Feature branches, read prod logs
- gcp-prodsupport: Merge & deploy lane #1, on-call
- gcp-techlead: Approve all lanes, security reviews
- gcp-techmgmt: Org-level sign-off (CEO/COO)
- gcp-billing: Cost dashboards & invoice export
- Updated PAM entitlements for all 4 lanes
- Lane 1: App Code (30 min) - jit-deploy
- Lane 2: Env Infra (60 min) - jit-tf-admin
- Lane 3: Org Infra (30 min) - break-glass
- Lane 4: Project Bootstrap (30 min) - jit-project-bootstrap
- Added failsafe account monitoring
- Alert policy for u2i-failsafe@google.com usage
- Dedicated log sink and dashboard
- 24-hour retro-PR requirement
- Created groups migration guide
- Updated all references from old to new groups
Note: Google PAM currently only supports single approval,
policy requires dual approval for lanes 3-4.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add PAM Slack integration and finalize security setup
- Implement Slack bot integration for PAM notifications
- Add Cloud Function with Slack SDK for rich formatting
- Configure organization-wide PAM audit log sink
- Add failsafe account monitoring and alerts
- Update documentation with setup guides
- Configure Secret Manager for bot token storage
Note: New groups (gcp-prodsupport, gcp-techlead, gcp-techmgmt, gcp-billing)
must be created in Google Workspace before full deployment can complete.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove node_modules and zip files from git
- Remove accidentally committed node_modules directory
- Remove Cloud Functions deployment ZIP file
- Update .gitignore to properly exclude these files
- These should be built/installed during deployment, not stored in git
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 12d81ce commit 677ddaa
45 files changed
Lines changed: 5769 additions & 2204 deletions
File tree
- 1-organization
- 2-security
- functions
- pam-slack-notifier
- policies
- runbooks
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
0 commit comments