Your First 60 Minutes in AWS: What Everyone Skips and Regrets Later
Table of Contents
You create an AWS account, generate root access keys, and share them on Slack so your cofounder can deploy. You are moving fast. Three months later, you wake up to a $47,000 bill. Cryptominers have been running on your account for weeks. CloudTrail was not enabled, so you cannot even see how they got in.
This happens constantly. Not because founders are careless, but because AWS security documentation assumes you have a compliance team and six months to implement controls. You have 18 months of runway and a product to ship.
Time: About 60 minutes.
Outcome: A locked-down AWS account with MFA on root, an IAM admin user, CloudTrail logging, billing alerts at $10/$50/$100, and the first file of your agent governance system.
Why This Matters
AWS operates on a shared responsibility model. They secure the physical data centers, the hypervisors, the network fabric. You secure your account, your data, and your configurations. Every misconfiguration is your problem.
┌─────────────────────────────────────────────────────┐
│ YOUR RESPONSIBILITY │
├─────────────────────────────────────────────────────┤
│ Customer Data & Encryption │
│ Identity & Access Management (IAM) │
│ Application Security │
│ OS, Network & Firewall Configuration │
│ Security Group Rules │
├─────────────────────────────────────────────────────┤
│ AWS RESPONSIBILITY │
├─────────────────────────────────────────────────────┤
│ Physical Security of Data Centers │
│ Hardware & Network Infrastructure │
│ Virtualization Layer │
│ Managed Service Internals (S3, RDS, Lambda) │
└─────────────────────────────────────────────────────┘ By the end of this post, your account will be protected against:
- Credential theft: root keys floating around in Slack,
.envfiles, or GitHub commits - Bill shock: waking up to charges you did not expect
- Invisible breaches: attackers operating without any audit trail
- Single point of failure: one compromised password giving total access
Root Account Lockdown
When you create an AWS account, you get a single identity: the root user. This account has unlimited privileges. It can bypass every IAM policy, delete CloudTrail logs, close the entire account, and do anything to any resource with no restrictions.
There is no way to limit root’s power. That is by design. It is the break-glass account for emergencies. But that same unlimited power makes it the single most dangerous credential in your infrastructure.
The goal: use root once to set up your account, then never touch it again.
Delete Root Access Keys
Root access keys are long-lived credentials that grant unlimited API access. If they exist, delete them now.
If something is actively using these keys, you have a bigger problem. Stop, find where they are used, and plan a migration to IAM credentials before deleting. We cover proper credential management in Part 3.
Enable MFA on Root
MFA adds a second authentication factor. Even if someone steals your password, they cannot sign in without physical access to your MFA device.
| Type | Security | Convenience | Recommendation |
|---|---|---|---|
| Passkey (FIDO2) | Highest | High | Best for most founders |
| Authenticator app | High | High | Good alternative |
| Hardware TOTP token | Highest | Low | Enterprise security teams |
If you lose access to your MFA device and do not have recovery codes, you will go through AWS support to regain access. This process takes days. Save the recovery codes now.
When You Actually Need Root
After setup, these are the only tasks that require root access:
- Close or rename your AWS account
- Change the root email address
- Activate IAM access to Billing (one-time, we do this below)
- Restore IAM permissions if completely locked out
- Change your AWS Support plan
Full list: Tasks requiring root credentials
For everything else, use an IAM admin user.
Your First IAM Admin User
MFA protects against password theft, but it does not reduce root’s power. A mistake made while signed in as root (deleting the wrong resource, misconfiguring a policy) has no safety net.
An IAM admin user has the same practical capabilities for daily work, with critical differences:
┌──────────────────────────────────────────────────┐
│ ROOT USER │
│ Unlimited Power · No Guardrails · Emergency Only │
│ MFA Enabled · Locked Away · Never Used Daily │
└──────────────────────┬───────────────────────────┘
│ Creates
▼
┌──────────────────────────────────────────────────┐
│ IAM ADMIN USER │
│ Full Practical Access · Actions Logged │
│ Revocable · Restrictable · Daily Operations │
└──────────────────────────────────────────────────┘
Every action your IAM admin takes is logged in CloudTrail with a specific user identity. You can revoke access without losing account control. You can add restrictions later.
Create the Admin Group and User
Create a group first, then add your user to it. This pattern scales when you hire.
CloudTrail: Your Audit Log
CloudTrail records every API call made in your AWS account. Every console click, every CLI command, every SDK call. When something goes wrong (a resource gets deleted, a security group opens to the internet, costs spike), CloudTrail is how you figure out what happened.
Without it, you are flying blind. With it, you have a forensic record of:
- Who made the change (which IAM user or role)
- What they changed (which API call, which resource)
- When it happened (timestamp)
- Where they were (source IP address)
- How they authenticated (console, CLI, SDK)
Management events (resource creation, deletion, configuration changes) are free to log. There is no reason not to enable this.
CloudTrail does not log S3 object-level access or Lambda invocations by default. Those are data events and cost extra. Management events are enough for now.
Your account is now recording everything. If something goes wrong six months from now, you will be able to trace exactly what happened.
Billing Alerts: No Surprise Bills
AWS bills are post-paid. You find out what you owe after you have already spent it. Without alerts, a misconfiguration or attack can run up thousands of dollars before you notice.
Activate IAM Billing Access
By default, only root can view billing. Fix this now so your IAM admin can manage budgets.
Create Budget Alerts
In Part 4, we’ll refine these thresholds to 50%, 80%, 100%, 150% when we codify budgets in Terraform.
AWS Budgets notify you. They do not stop spending. If you need hard spending limits, AWS Organizations with Service Control Policies can help. We cover that in Part 2.
Free Tier Gotchas
AWS Free Tier is generous but has sharp edges:
| Service | Free Tier Limit | Common Gotcha |
|---|---|---|
| EC2 | 750 hrs/month t2.micro or t3.micro (varies by account age) | Two instances doubles the hours |
| RDS | 750 hrs/month db.t3.micro | Multi-AZ doubles the hours |
| S3 | 5 GB storage | Logs accumulate fast |
| Data Transfer | 100 GB/month outbound | Images and video add up |
| NAT Gateway | Not free | $0.045/hr = $32/month |
Enable Cost Anomaly Detection
AWS Cost Anomaly Detection uses machine learning to flag unusual spending patterns. It is free.
Tagging Strategy
Tags are key-value labels on AWS resources. They seem optional until you have 200 resources and cannot tell which project they belong to, whether they are safe to delete, or who created them.
Start with four required tags on every resource:
| Tag Key | Example Values | Purpose |
|---|---|---|
Environment | production, staging, dev | Know what is safe to delete |
Project | website, api, data-pipeline | Track costs per project |
Owner | yourname, platform-team | Know who to ask about a resource |
ManagedBy | terraform, manual, agent | Distinguish human-created from agent-created resources |
The ManagedBy tag becomes critical when you start using AI coding agents. When an agent provisions a resource, tagging it ManagedBy=agent creates an audit trail you will rely on heavily.
Coming in Part 4: We enforce required tags with Terraform so untagged resources are rejected before they are created.
Region Selection
AWS has 30+ regions worldwide. Pick one primary region and stick with it.
Recommendation for learning: us-east-1 (N. Virginia). It gets new features first, has the most documentation, and is generally the cheapest. The latency difference for development work is irrelevant.
For production, answer two questions before deploying:
- Where are your users? If 80% are in India,
ap-south-1(Mumbai) serves them better than Virginia. - What does compliance require? GDPR may require EU data residency. Check before you deploy, not after.
Test your latency to AWS regions:
| Factor | Consideration |
|---|---|
| User latency | Deploy where your users are |
| Compliance | GDPR, HIPAA, and local laws may dictate regions |
| Service availability | Not all services exist in all regions |
| Pricing | Can vary 10-20% between regions |
| Feature releases | us-east-1 gets features first |
Create Your AGENT-INSTRUCTIONS.md
This is the first file of a system that will grow across all 70 parts of this series.
AGENT-INSTRUCTIONS.md is a living document that tells AI coding agents how to work with your infrastructure. It starts with a single line. By Part 62, it will contain 96 lines of rules covering IAM, Terraform, networking, security, Docker, Lambda, and agent governance.
It will be the most important file in your repository.
Create it now in your project root:
# Agent Instructions for AWS Infrastructure
One line. That is all for now. Every time we establish a rule, a convention, or a boundary in this series, we add it here. The agents you work with will read this file before generating infrastructure code.
This is not busy work. This file is the difference between an agent that generates plausible-looking infrastructure and an agent that generates infrastructure matching your specific constraints. We prove that difference with data starting in Part 4.
| ❌ Under | Using root daily, no MFA, no billing alerts, no audit trail |
| ✅ Right | Root locked with MFA, IAM admin for daily work, CloudTrail logging, billing alerts at $10/$50/$100, tagging strategy documented, AGENT-INSTRUCTIONS.md started |
| ❌ Over | AWS Organizations with SCPs, dedicated security OU, SSO federation, and a 40-page IAM policy document for a solo founder |
| 🤖 Agent Trap | Agent creates IAM user with AdministratorAccess and no MFA “to avoid permission errors.” We address this directly in Part 2. |
What’s Coming
Next in Part 2: IAM, The Key to Everything, we set up IAM properly: users, groups, roles, policies, and a dedicated agent execution role with scoped permissions. The AdministratorAccess policy your admin user has today is temporary.
Coming in Part 3: You install your coding agents and give them their first AWS task. The AGENT-INSTRUCTIONS.md file you just created becomes their operating manual.
Free Download: AWS Account Security Checklist
A printable PDF covering root lockdown, MFA setup, CloudTrail, billing alerts, tagging, and region selection. Includes a “first 60 minutes” timeline you can follow step by step. Get it at works-on-my.cloud/resources/aws-security-checklist.
Security
Billing
Foundation
0 of 0 completed
Key Takeaways
- The root account is for emergencies only: lock it with MFA, delete access keys, and never use it for daily work.
- CloudTrail is free for management events and there is no reason not to enable it from day one.
- Billing alerts at $10, $50, and $100 catch problems before they become disasters.
- Your AGENT-INSTRUCTIONS.md starts as a single line today; by Part 62, it will be 96 lines of accumulated rules and the most important file in your repository.
Related Posts
IAM: The Key to Everything
Least privilege without losing your mind. Build a working IAM setup for your startup, not enterprise complexity, not 'just use AdministratorAccess.' The practical middle ground.
Your Local AWS Setup: Stop Hardcoding Access Keys Forever
Stop hardcoding access keys forever. Configure your local development environment the right way: AWS CLI, IAM Identity Center, and credential security that scales with your team.
Terraform Fundamentals: Why Clicking Is Technical Debt
Stop clicking through the AWS console. Set up your Terraform project from scratch with remote state, proper structure, and templates for everything we've built so far.
OpenTelemetry Setup: Observability That Grows With You
Set up the OTel Collector once, choose your backend. SigNoz or Grafana stack. Your observability foundation for the entire series.
Git & GitHub: The Foundation Your Whole Team Builds On
The foundation your whole team, humans and agents, builds on. Git conventions, agent commit hygiene, and attribution that tracks who wrote what.
Branch Protection & PR Workflow: Quality Gates for Humans and Agents
Quality gates that catch both human and agent mistakes. Branch protection, PR templates with agent-review sections, and CODEOWNERS for your growing team.
Pre-Commit Hooks & Code Quality: Your Agents' First Guardrail
Your agents' first guardrail, and your Scorecard's first data source. Pre-commit hooks that catch what human review misses, especially from AI-generated code.