ЁЯУЛ рдзрдбрд╛ 06 тАФ IAM рд╕реНрд╡рдЪреНрдЫрддрд╛: рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдирд┐рдпрдорд╛рдВрдЪреЗ рдкреЛрд╕реНрдЯрд░
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 06 тАФ рднрд╛рдЧ 1 рд╕рдВрдкрд▓рд╛! ┬╖ рдорд╛рдЧреЗ: lesson-05-machine-identities ┬╖ рдкреБрдвреЗ: lesson-07-what-is-ec2
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ05, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд рдмрд╣реБрддреЗрдХ AWS рд╕реБрд░рдХреНрд╖рд╛ рдШрдЯрдирд╛ рдЯрд╛рд│рдгрд╛рд▒реНрдпрд╛ рдЪрд╛рд░ рд╕рд╡рдпреА тАФ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреНрдпрд╛ рднрд┐рдВрддреАрд╡рд░рдЪреЗ рдкреЛрд╕реНрдЯрд░.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЪрд╛рд░ рдирд┐рдпрдо, рдореЛрдареНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдд, рдЬрд┐рдереЗ рд╕рдЧрд│реЗ рдХрд╛рд░реНрдбрд╛рдВрд╕рд╛рдареА рд░рд╛рдВрдЧ рд▓рд╛рд╡рддрд╛рдд рддрд┐рдереЗ рдЪрд┐рдХрдЯрд╡рд▓реЗрд▓реЗ:
ЁЯУ▒ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд░рд╛рд╡рд░ рджреЛрди рдХреБрд▓рдкреЗ (MFA). рдлрдХреНрдд рдХрд╛рд░реНрдб рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА рдлрдХреНрдд рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╕рдгрд╛рд░реА рд╡рд╕реНрддреВ (рддреБрдордЪрд╛ phone) рд╕реБрджреНрдзрд╛ рджрд╛рдЦрд╡рддрд╛. рдЪреЛрд░рд▓реЗрд▓рд╛ password рдирд┐рд░реБрдкрдпреЛрдЧреА рдЕрд░реНрдзреА рдЪрд╛рд╡реА рдмрдирддреЛ. Root: MFA. рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдгреВрд╕: MFA. рдЕрдкрд╡рд╛рдж рдирд╛рд╣реАрдд, "рдирдВрддрд░" рдирд╛рд╣реА.
ЁЯдП рдХрд╛рдо рднрд╛рдЧрд╡рдгрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдЪрд┐рдареНрдареА (least privilege). рдЭрд╛рдбрд╛рдВрдирд╛ рдкрд╛рдгреА рдШрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдореБрд▓реАрд▓рд╛ рдмрд╛рдЧреЗрддрд▓реНрдпрд╛ рдирд│рд╛рдЪреА рдЪрд┐рдареНрдареА рдорд┐рд│рддреЗ тАФ "рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рд╣рд╛рд╡реЗ рдореНрд╣рдгреВрди" рдорд╛рд╕реНрдЯрд░-рдЪрд╛рд╡реА рдирд╛рд╣реА. рдЕрд░реБрдВрдж рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛; рдЦрд░рд╛ рдирдХрд╛рд░ рдЖрд▓рд╛ рдХреА рдордЧрдЪ рд╡рд╛рдврд╡рд╛. рдЙрд▓рдЯ рджрд┐рд╢реЗрдиреЗ рдЬрд╛рдгреЗ (
AdministratorAccessрдиреЗ рд╕реБрд░реБрд╡рд╛рдд, рдирдВрддрд░ рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреЗ рд╡рдЪрди) рдПрдХрджрд╛рд╣реА рдХрдореА рдХрд░рдгреНрдпрд╛рдд рд╕рдВрдкрд▓реЗрд▓реЗ рдирд╛рд╣реА. ЁЯШЕЁЯЪл рдорд╛рд╕реНрдЯрд░-рдЪрд╛рд╡реА рд╡рд░реНрдЧрд╛рдВрддреВрди рдлрд┐рд░рдд рдирд╛рд╣реА; рдХрд╛рдпрдордЪреНрдпрд╛ рд╕реБрдЯреНрдпрд╛ рдЪрд╛рд╡реНрдпрд╛ рдирд╛рд╣реАрдд. Root рддрд┐рдЬреЛрд░реАрддрдЪ рд░рд╛рд╣рддреЛ (рдзрдбрд╛ 01). рдЖрдгрд┐ рдХрд╛рдпрдордЪреНрдпрд╛
AKIAтАжkeys тАФ "рдкрд╛рдпрдкреБрд╕рдгреАрдЦрд╛рд▓реА рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ рд╕реБрдЯреНрдпрд╛ рдЪрд╛рд╡реНрдпрд╛" тАФ рд╢реЛрдзреВрди рдХрд╛рдврд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдЯреЛрдкреНрдпрд╛рдВрдиреА рдмрджрд▓рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдзрдбреЗ 04тАУ05). рдЬреНрдпрд╛ рдЕрд╕рд╛рдпрд▓рд╛рдЪ рд╣рд╡реНрдпрд╛рдд рддреНрдпрд╛ rotate рд╣реЛрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рддрдкрд╛рд╕рд▓рд╛ рдЬрд╛рддреЛ.ЁЯз╛ рдиреЛрдВрджрд╡рд╣реА рдиреЗрд╣рдореА рдЪрд╛рд▓реВ (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 рд╕рд╛рдзрдиреЗ)
- Credential report тАФ рдПрдХ CSV: рдкреНрд░рддреНрдпреЗрдХ user, keys рдЪреЗ рд╡рдп, MFA рдЪреА рд╕реНрдерд┐рддреА.
- Access Advisor тАФ "рдпрд╛ user рдХрдбреЗ S3 рдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рдЖрд╣реЗрдд рдкрдг 400 рджрд┐рд╡рд╕рд╛рдВрдд рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдирд╛рд╣реАрдд" тЖТ рдЪрд┐рдареНрдареА рд▓рд╣рд╛рди рдХрд░рд╛.
- IAM Access Analyzer тАФ рд╣реЗрддреВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реНрдпрд╛рдкрдХрдкрдгреЗ shared рдЕрд╕рд▓реЗрд▓реЗ resources рд╢реЛрдзрддреЛ.
- CloudTrail тАФ API рдиреЛрдВрджрд╡рд╣реА (console рдордзреНрдпреЗ 90 рджрд┐рд╡рд╕рд╛рдВрдЪрд╛ event history рдореЛрдлрдд; рдХрд╛рдпрдорд╕рд╛рдареА S3 рдордзреНрдпреЗ trail).
ЁЯдФ рдХрд╛
рддреБрдореНрд╣реА рдХрдзреАрд╣реА рд╡рд╛рдЪрд╛рд▓ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ 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 рдирд╕рддреЗ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдлрдХреНрдд root рд╡рд░ MFA тАФ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдгрд╕рд╛рд▓рд╛ рддреЗ рд╣рд╡реЗ
- 'рдкреБрдврдЪреНрдпрд╛ рддрд┐рдорд╛рд╣реАрдд keys rotate рдХрд░реВ'
- рдХрд╛рд╣реА рдкреИрд╕реЗ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА CloudTrail рдмрдВрдж тАФ audit рд╣рд╛ AWS рд╡рд░рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реНрд╡рд╕реНрдд рд╡рд┐рдорд╛ рдЖрд╣реЗ
тПня╕П рдкреБрдвреЗ тАФ рднрд╛рдЧ 2 рд╕реБрд░реВ ЁЯЦея╕П
рдУрд│рдЦ рд╕реБрдЯрд▓реА. рдЖрддрд╛ рджреБрд╕рд░рд╛ рдкрд╛рдпрд╛: рдЬреНрдпрд╛рд╡рд░ рд╕рдЧрд│реЗ рдЪрд╛рд▓рддреЗ рддреЗ рднрд╛рдбреНрдпрд╛рдЪреЗ рд╕рдВрдЧрдгрдХ. EC2 instance рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреЗ рдХрд╛рдп?
git checkout lesson-07-what-is-ec2