🎯 Goal: Automate IAM user onboarding β€” from HR CSV β†’ AWS users, groups, console access β€” zero manual steps.

βœ… You’ll build:


🧠 Why This Matters (Beyond The Office Jokes)

Manual IAM Onboarding Terraform-Managed IAM
❌ HR β†’ Email β†’ Ticket β†’ IAM Admin β†’ 3-day delay βœ… HR β†’ CSV β†’ terraform apply β†’ 30 seconds
❌ Inconsistent usernames (Michael, mscott, michael-scott) βœ… Standardized: mscott β†’ [first_initial][last_name]
❌ No audit trail for user creation βœ… Git-tracked CSV + Terraform state
❌ Passwords shared insecurely (Slack/email) βœ… Auto-generated + reset-on-first-login

πŸ’‘ Golden Rule:

β€œIf your identity system isn’t version-controlled β€” it’s not production-ready.”


πŸ“¦ Architecture Diagram

flowchart LR
  A[HR System<br/>(users.csv)] -->|Git| B[Terraform Repo]
  B --> C[Terraform Plan/Apply]
  C --> D[AWS IAM]
  D --> E[Users: mscott, dschrute...]
  D --> F[Groups: Education, Managers, Engineers]
  D --> G[Memberships: Dwight β†’ Managers]
  D --> H[Login Profiles: Reset required]

βœ… Critical Flow:

  1. HR updates users.csv (adds jdoe,Engineering,Software Engineer)
  2. Git commit β†’ CI/CD triggers terraform apply
  3. Terraform:
  4. New hire gets email: β€œYour AWS account is ready: https://[account].signin.aws.amazon.com/console”

✏️ Hands-On: Terraform Implementation

πŸ”Ή File Structure (/day16/)

day16/
β”œβ”€β”€ backend.tf        # S3 remote state (encrypted, versioned)
β”œβ”€β”€ provider.tf       # AWS provider (locked version)
β”œβ”€β”€ users.csv         # πŸ“Š HR data source (26 users)
β”œβ”€β”€ main.tf           # User creation + CSV parsing
β”œβ”€β”€ groups.tf         # Groups + dynamic membership
└── TASK.md           # πŸ“ Your challenge (MFA, SSO, HR integration)


1️⃣ users.csv β€” Single Source of Truth