ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯУЛ рдзрдбрд╛ 06 тАФ IAM рд╕реНрд╡рдЪреНрдЫрддрд╛: рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдирд┐рдпрдорд╛рдВрдЪреЗ рдкреЛрд╕реНрдЯрд░
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯУЛ рдзрдбрд╛ 06 тАФ IAM рд╕реНрд╡рдЪреНрдЫрддрд╛: рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдирд┐рдпрдорд╛рдВрдЪреЗ рдкреЛрд╕реНрдЯрд░

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 06 тАФ рднрд╛рдЧ 1 рд╕рдВрдкрд▓рд╛! ┬╖ рдорд╛рдЧреЗ: lesson-05-machine-identities ┬╖ рдкреБрдвреЗ: lesson-07-what-is-ec2


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ05, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рдмрд╣реБрддреЗрдХ AWS рд╕реБрд░рдХреНрд╖рд╛ рдШрдЯрдирд╛ рдЯрд╛рд│рдгрд╛рд▒реНрдпрд╛ рдЪрд╛рд░ рд╕рд╡рдпреА тАФ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреНрдпрд╛ рднрд┐рдВрддреАрд╡рд░рдЪреЗ рдкреЛрд╕реНрдЯрд░.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдЪрд╛рд░ рдирд┐рдпрдо, рдореЛрдареНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдд, рдЬрд┐рдереЗ рд╕рдЧрд│реЗ рдХрд╛рд░реНрдбрд╛рдВрд╕рд╛рдареА рд░рд╛рдВрдЧ рд▓рд╛рд╡рддрд╛рдд рддрд┐рдереЗ рдЪрд┐рдХрдЯрд╡рд▓реЗрд▓реЗ:

  1. ЁЯУ▒ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд░рд╛рд╡рд░ рджреЛрди рдХреБрд▓рдкреЗ (MFA). рдлрдХреНрдд рдХрд╛рд░реНрдб рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА рдлрдХреНрдд рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╕рдгрд╛рд░реА рд╡рд╕реНрддреВ (рддреБрдордЪрд╛ phone) рд╕реБрджреНрдзрд╛ рджрд╛рдЦрд╡рддрд╛. рдЪреЛрд░рд▓реЗрд▓рд╛ password рдирд┐рд░реБрдкрдпреЛрдЧреА рдЕрд░реНрдзреА рдЪрд╛рд╡реА рдмрдирддреЛ. Root: MFA. рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдгреВрд╕: MFA. рдЕрдкрд╡рд╛рдж рдирд╛рд╣реАрдд, "рдирдВрддрд░" рдирд╛рд╣реА.

  2. ЁЯдП рдХрд╛рдо рднрд╛рдЧрд╡рдгрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдЪрд┐рдареНрдареА (least privilege). рдЭрд╛рдбрд╛рдВрдирд╛ рдкрд╛рдгреА рдШрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдореБрд▓реАрд▓рд╛ рдмрд╛рдЧреЗрддрд▓реНрдпрд╛ рдирд│рд╛рдЪреА рдЪрд┐рдареНрдареА рдорд┐рд│рддреЗ тАФ "рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рд╣рд╛рд╡реЗ рдореНрд╣рдгреВрди" рдорд╛рд╕реНрдЯрд░-рдЪрд╛рд╡реА рдирд╛рд╣реА. рдЕрд░реБрдВрдж рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛; рдЦрд░рд╛ рдирдХрд╛рд░ рдЖрд▓рд╛ рдХреА рдордЧрдЪ рд╡рд╛рдврд╡рд╛. рдЙрд▓рдЯ рджрд┐рд╢реЗрдиреЗ рдЬрд╛рдгреЗ (AdministratorAccess рдиреЗ рд╕реБрд░реБрд╡рд╛рдд, рдирдВрддрд░ рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреЗ рд╡рдЪрди) рдПрдХрджрд╛рд╣реА рдХрдореА рдХрд░рдгреНрдпрд╛рдд рд╕рдВрдкрд▓реЗрд▓реЗ рдирд╛рд╣реА. ЁЯШЕ

  3. ЁЯЪл рдорд╛рд╕реНрдЯрд░-рдЪрд╛рд╡реА рд╡рд░реНрдЧрд╛рдВрддреВрди рдлрд┐рд░рдд рдирд╛рд╣реА; рдХрд╛рдпрдордЪреНрдпрд╛ рд╕реБрдЯреНрдпрд╛ рдЪрд╛рд╡реНрдпрд╛ рдирд╛рд╣реАрдд. Root рддрд┐рдЬреЛрд░реАрддрдЪ рд░рд╛рд╣рддреЛ (рдзрдбрд╛ 01). рдЖрдгрд┐ рдХрд╛рдпрдордЪреНрдпрд╛ AKIAтАж keys тАФ "рдкрд╛рдпрдкреБрд╕рдгреАрдЦрд╛рд▓реА рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ рд╕реБрдЯреНрдпрд╛ рдЪрд╛рд╡реНрдпрд╛" тАФ рд╢реЛрдзреВрди рдХрд╛рдврд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдЯреЛрдкреНрдпрд╛рдВрдиреА рдмрджрд▓рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдзрдбреЗ 04тАУ05). рдЬреНрдпрд╛ рдЕрд╕рд╛рдпрд▓рд╛рдЪ рд╣рд╡реНрдпрд╛рдд рддреНрдпрд╛ rotate рд╣реЛрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рддрдкрд╛рд╕рд▓рд╛ рдЬрд╛рддреЛ.

  4. ЁЯз╛ рдиреЛрдВрджрд╡рд╣реА рдиреЗрд╣рдореА рдЪрд╛рд▓реВ (CloudTrail). рдЙрдШрдбрд▓реЗрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд░, рджрд╛рдЦрд╡рд▓реЗрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб, рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реЗ: рдХреЛрдг, рдХрд╛рдп, рдХрдзреА, рдХреБрдареВрди. рд╣реЗрд░рдЧрд┐рд░реАрд╕рд╛рдареА рдирд╛рд╣реА тАФ рддрд░ "рд░рд╛рддреНрд░реА 2 рд╡рд╛рдЬрддрд╛ рдХрд╛рдп рдЭрд╛рд▓реЗ?" рдпрд╛рд▓рд╛ рдЦрд╛рдВрджреЗ рдЙрдбрд╡рдгреНрдпрд╛рдРрд╡рдЬреА рдЙрддреНрддрд░ рдорд┐рд│рд╛рд╡реЗ рдореНрд╣рдгреВрди. рдПрдХрджрд╛, рд╕рдВрдкреВрд░реНрдг account рд╕рд╛рдареА рдЪрд╛рд▓реВ рдХрд░рд╛, рдЖрдгрд┐ рддреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЪрд╡реЗрд▓ рддреНрдпрд╛ рджрд┐рд╡рд╕рд╛рдкрд░реНрдпрдВрдд рд╡рд┐рд╕рд░реВрди рдЬрд╛.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart TB
    r1["ЁЯУ▒ MFA everywhere<br/>stolen password = useless half-key"]
    r2["ЁЯдП least privilege<br/>smallest slip that does the job"]
    r3["ЁЯЪл no root walks, no eternal keys<br/>hats and badges instead"]
    r4["ЁЯз╛ CloudTrail always on<br/>who┬╖what┬╖when┬╖from where"]
    good["тЬЕ the boring account<br/>that never makes the news"]
    r1 --> good
    r2 --> good
    r3 --> good
    r4 --> good

тЭУ рдХрд╛рдп (рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рд╕реЛрдмрдд рдпреЗрдгрд╛рд░реА audit рд╕рд╛рдзрдиреЗ)

ЁЯдФ рдХрд╛

рддреБрдореНрд╣реА рдХрдзреАрд╣реА рд╡рд╛рдЪрд╛рд▓ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ AWS incident postmortem рдордзреНрдпреЗ рдпрд╛рдВрдкреИрдХреА рдХрд┐рдорд╛рди рдПрдХ рдЕрд╕рддреЗ: MFA рдирд╛рд╣реА, рдЦреВрдк рд╡реНрдпрд╛рдкрдХ policy, рдлреБрдЯрд▓реЗрд▓реА рдХрд╛рдпрдордЪреА key, рдХрд┐рдВрд╡рд╛ "рдХрд╛рдп рдЭрд╛рд▓реЗ рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд│рд▓реЗ рдирд╛рд╣реА" (trail рдирд╛рд╣реА). рдЪрд╛рд░ рдирд┐рдпрдо, рдЪрд╛рд░ рдЙрддрд╛рд░реЗ. рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ рдЕрд╕рдгреЗ рд╣реЗрдЪ рдзреНрдпреЗрдп тАФ рдХрдВрдЯрд╛рд│рд╡рд╛рдгреА accounts рдмрд╛рддрдореНрдпрд╛рдВрдордзреНрдпреЗ рдпреЗрдд рдирд╛рд╣реАрдд.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (рдореЛрдлрдд тАФ рд╕реНрд╡рддрдГрдЪреЗ audit рдХрд░рд╛)

# 1) the credential report тАФ your account's report card:
aws iam generate-credential-report && sleep 2
aws iam get-credential-report --query Content --output text | base64 -d | cut -d, -f1,4,8,9 | column -t -s,
# look for: mfa_active=false on humans ЁЯШм, ancient access_key_1_last_rotated

# 2) is the logbook on?
aws cloudtrail describe-trails --query 'trailList[].{Name:Name,MultiRegion:IsMultiRegionTrail}'
# empty? тЖТ create a trail (console, 2 minutes) before Part 2.

# 3) recent history exists even without a trail (90 days):
aws cloudtrail lookup-events --max-results 3 \
  --query 'Events[].{when:EventTime,who:Username,what:EventName}'

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

aws iam get-credential-report рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдгрд╕рд╛рд╕рд╛рдареА MFA true рджрд╛рдЦрд╡рддреЛ рдЖрдгрд┐ 90 рджрд┐рд╡рд╕рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬреБрдиреА рдПрдХрд╣реА active access key рдирд╕рддреЗ.

ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛

рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

тПня╕П рдкреБрдвреЗ тАФ рднрд╛рдЧ 2 рд╕реБрд░реВ ЁЯЦея╕П

рдУрд│рдЦ рд╕реБрдЯрд▓реА. рдЖрддрд╛ рджреБрд╕рд░рд╛ рдкрд╛рдпрд╛: рдЬреНрдпрд╛рд╡рд░ рд╕рдЧрд│реЗ рдЪрд╛рд▓рддреЗ рддреЗ рднрд╛рдбреНрдпрд╛рдЪреЗ рд╕рдВрдЧрдгрдХ. EC2 instance рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреЗ рдХрд╛рдп?

git checkout lesson-07-what-is-ec2

ЁЯУЛ Lesson 06 тАФ IAM hygiene: the ID-office rules poster

ЁЯУН You are here: Lesson 06 of 12 тАФ end of Part 1! ┬╖ Previous: lesson-05-machine-identities ┬╖ Next: lesson-07-what-is-ec2


ЁЯУж What's in this branch

Lessons 01тАУ05, plus the four habits that prevent most AWS security incidents тАФ the poster on the ID-office wall.

ЁЯзТ Explain like I'm 5

Four rules, big letters, taped where everyone queues for cards:

  1. ЁЯУ▒ Two locks on every door that matters (MFA). A card alone isn't enough тАФ you also show the thing only you carry (your phone). A stolen password becomes a useless half-key. Root: MFA. Every human: MFA. No exceptions, no "later".

  2. ЁЯдП The smallest slip that does the job (least privilege). The kid watering plants gets the garden-tap slip тАФ not the master key "to be safe". Start narrow; widen when a real denial says you must. Going the other direction (start with AdministratorAccess, promise to tighten later) has never once ended in tightening. ЁЯШЕ

  3. ЁЯЪл No master key walks the halls; no eternal spare keys. Root stays in the safe (lesson 01). And permanent AKIAтАж keys тАФ the "spare keys under the doormat" тАФ get hunted down and replaced with hats (lessons 04тАУ05). The ones that must exist get rotated and get usage-checked.

  4. ЁЯз╛ The logbook is always on (CloudTrail). Every door opened, every card shown, written down: who, what, when, from where. Not to spy тАФ so that "what happened at 2 AM?" has an ANSWER instead of a shrug. Turn it on once, account-wide, forget it until the day it saves you.

ЁЯЧ║я╕П Diagram

flowchart TB
    r1["ЁЯУ▒ MFA everywhere<br/>stolen password = useless half-key"]
    r2["ЁЯдП least privilege<br/>smallest slip that does the job"]
    r3["ЁЯЪл no root walks, no eternal keys<br/>hats and badges instead"]
    r4["ЁЯз╛ CloudTrail always on<br/>who┬╖what┬╖when┬╖from where"]
    good["тЬЕ the boring account<br/>that never makes the news"]
    r1 --> good
    r2 --> good
    r3 --> good
    r4 --> good

тЭУ What (the audit tools that come with the office)

ЁЯдФ Why

Every AWS incident postmortem you'll ever read features at least one of: no MFA, an over-broad policy, a leaked permanent key, or "we couldn't tell what happened" (no trail). Four rules, four antidotes. Boring is the goal тАФ boring accounts don't make the news.

ЁЯзк Try it (free тАФ audit yourself)

# 1) the credential report тАФ your account's report card:
aws iam generate-credential-report && sleep 2
aws iam get-credential-report --query Content --output text | base64 -d | cut -d, -f1,4,8,9 | column -t -s,
# look for: mfa_active=false on humans ЁЯШм, ancient access_key_1_last_rotated

# 2) is the logbook on?
aws cloudtrail describe-trails --query 'trailList[].{Name:Name,MultiRegion:IsMultiRegionTrail}'
# empty? тЖТ create a trail (console, 2 minutes) before Part 2.

# 3) recent history exists even without a trail (90 days):
aws cloudtrail lookup-events --max-results 3 \
  --query 'Events[].{when:EventTime,who:Username,what:EventName}'

тЬЕ Verify тАФ what you should see

aws iam get-credential-report shows MFA true for every human and no active access key older than 90 days.

ЁЯз╣ Clean up тАФ do not leave running

nothing to clean up тАФ this lesson is free ЁЯОЙ

тЪая╕П Common mistakes

тПня╕П Next тАФ Part 2 begins ЁЯЦея╕П

Identity solved. Now the OTHER foundation: the rented computers everything runs on. What actually IS an EC2 instance?

git checkout lesson-07-what-is-ec2
тЖР Previousmachine identitiesNext тЖТwhat is ec2

This page is the lesson's README from the lesson-06-iam-hygiene branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.