ЁЯкк рдзрдбрд╛ 01 тАФ IAM рдХрд╛: рд╢рд╛рд│реЗрдЪреЗ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-users-groups-root
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдкреНрд░рддреНрдпреЗрдХ AWS request рд▓рд╛ рдЬреНрдпрд╛рдЪреЗ рдЙрддреНрддрд░ рджреНрдпрд╛рд╡реЗрдЪ рд▓рд╛рдЧрддреЗ рдЕрд╕рд╛ рдПрдХрдЪ рдкреНрд░рд╢реНрди тАФ рдХреЛрдг рд╡рд┐рдЪрд╛рд░рддреЛрдп, рдХрд╛рдп рдХрд░рд╛рдпрд▓рд╛, рдХреЛрдгрддреНрдпрд╛ рд╡рд╕реНрддреВрд╡рд░ тАФ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдЙрддреНрддрд░ рджреЗрдгрд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп: IAM (Identity and Access Management). рдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рд╛рд▓ рдЕрд╢рд╛ рдЦрд▒реНрдпрд╛ files:
- iam/evaluate.py тАФ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреЗ рдирд┐рдпрдордкреБрд╕реНрддрдХ: AWS рдЪреНрдпрд╛ policy evaluation рдЪреЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model, рд╢реБрджреНрдз Python рдордзреНрдпреЗ
- iam/demo.py тАФ рдкреНрд░рддреНрдпреЗрдХ рдзрдбреНрдпрд╛рдЪреЗ рдирд┐рд░реНрдгрдп, рдкреНрд░рддреНрдпрдХреНрд╖ рдЪрд╛рд▓рддрд╛рдирд╛ (
python3 iam/demo.py <section>) - iam/policies/ тАФ рдЦрд░реЗ IAM policy documents (рддреБрдореНрд╣реА AWS рдордзреНрдпреЗ paste рдХрд░рд╛рд▓ рддреЗрдЪ JSON)
- iam/data/ тАФ рдирдореБрдирд╛ credential report, CloudTrail events рдЖрдгрд┐ last-accessed data
- iam/test_iam.py тАФ 12 checks, рдкреНрд░рддреНрдпреЗрдХ рдзрдбреНрдпрд╛рд╕рд╛рдареА рдПрдХ
ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЖрдзреА: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд Python 3 рд▓рд╛рдЧреЗрд▓, рдмрд╛рдХреА рдХрд╛рд╣реА рдирд╛рд╣реА тАФ AWS account рдирдХреЛ,
pip installрдирдХреЛ.evaluate.pyрд╣реЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model рдЖрд╣реЗ: рддреЗ AWS рдиреЗ рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╕рд╛рдВрдЧрд┐рддрд▓реЗрд▓реНрдпрд╛ рдХреНрд░рдорд╛рдиреЗрдЪ рдЪрд╛рд▓рддреЗ, рдкрдг рдЦрд▒реНрдпрд╛ AWS рдордзреНрдпреЗ рдЖрдгрдЦреА condition operators рдЖрдгрд┐ service-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдо рдЕрд╕рддрд╛рдд. рдЦрд▒реНрдпрд╛ policies IAM Policy Simulator рдиреЗ рдХрд┐рдВрд╡рд╛aws iam simulate-principal-policyрдиреЗ рддрдкрд╛рд╕рд╛. рдЦрд▒реНрдпрд╛ account рд╡рд░ рдЕрд╕реЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ commands рдирд╛ AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд; рдмрд╛рдХреА рд╕рдЧрд│реЗ рдЗрдереЗрдЪ рдЪрд╛рд▓рддреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдПрдХрд╛ рдореЛрдареНрдпрд╛ рд╢рд╛рд│реЗрдд рдПрдХрдЪ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп ЁЯкк рдЖрд╣реЗ. рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдд, lab рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рд╢рд┐рдХреНрд╖рдХрд╛рдВрдЪреНрдпрд╛ рдЦреЛрд▓реАрдд рдХреЛрдгреАрд╣реА рдлрдХреНрдд рд╣рд╕реВрди рдЖрдд рдЬрд╛рдд рдирд╛рд╣реА тАФ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рджрд░рд╡рд╛рдЬрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рд▓рд╛ рддреАрди рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рддреЛ:
- рддреБрдореНрд╣реА рдХреЛрдг рдЖрд╣рд╛рдд? (рддреБрдордЪреЗ рдУрд│рдЦрдкрддреНрд░ тАФ authentication)
- рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ? (рдкреБрд╕реНрддрдХ рдШреНрдпрд╛рдпрдЪреЗ, lab рдЙрдШрдбрд╛рдпрдЪреА тАФ action)
- рдХреЛрдгрддреНрдпрд╛ рд╡рд╕реНрддреВрд╡рд░? (рд╣реЗ рдкреБрд╕реНрддрдХ, рддреА lab тАФ resource)
рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрддрд░рд╛рдЪреА рд╕реБрд░реБрд╡рд╛рдд рдирд╛рд╣реА рдиреЗ рдХрд░рддреЗ. рдПрдЦрд╛рджрд╛ рд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рддрд╕реЗ рд╕рд╛рдВрдЧрдд рдЕрд╕реЗрд▓ рддрд░рдЪ рддреЗ рд╣реЛ рдореНрд╣рдгрддреЗ. рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢реНрдирд╛рдЪреА рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрддрд░рд╛рдЪреА рддреЗ рдПрдХ рдиреЛрдВрджрд╡рд╣реА рдареЗрд╡рддреЗ.
AWS рдореНрд╣рдгрдЬреЗрдЪ рддреА рд╢рд╛рд│рд╛. рдкреНрд░рддреНрдпреЗрдХ API call тАФ console рдордзреВрди, CLI рдордзреВрди, SDK рдордзреВрди, robot рдХрдбреВрди тАФ рд╣реА рдПрдХ рд╕рд╣реА рдХреЗрд▓реЗрд▓реА request рдЕрд╕рддреЗ, рдЖрдгрд┐ рдХрд╛рд╣реАрд╣реА рдШрдбрдгреНрдпрд╛рдЖрдзреА IAM рддрд┐рдЪреЗ рдЙрддреНрддрд░ рджреЗрддреЛ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
who["ЁЯкк WHO<br/>arn:aws:iam::111122223333:user/aishwarya"]
what["ЁЯОм WHAT<br/>s3:GetObject"]
which["ЁЯУД WHICH<br/>arn:aws:s3:::school-reports/term1.pdf"]
office["тЪЦя╕П IAM decides<br/>starts at DENY"]
log["ЁЯз╛ CloudTrail<br/>one line per request"]
who --> office
what --> office
which --> office
office -->|"1 decision"| out["ЁЯЪл IMPLICIT DENY<br/>no policy allows it"]
office -.->|"2 recorded"| log
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/iam/lesson-diagrams.html#l01
тЭУ рдХрд╛рдп
- Principal тАФ рдХреЛрдг рд╡рд┐рдЪрд╛рд░рддреЛрдп: IAM user, role session, root user, AWS
service, рдХрд┐рдВрд╡рд╛ federated identity. рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ ARN рдиреЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЬрд╛рддреЗ, рдЬрд╕реЗ
arn:aws:iam::111122223333:user/aishwarya. - Action тАФ
service:Verb, рдЙрджрд╛.s3:GetObject,ec2:RunInstances,iam:CreateUser. - Resource тАФ рддреНрдпрд╛ рд╡рд╕реНрддреВрдЪрд╛ ARN, рдЙрджрд╛.
arn:aws:s3:::school-reports/term1.pdf. - Authentication рд╡рд┐рд░реБрджреНрдз authorization тАФ рдХреЛрдг рд╣реЗ рдХрд│рдгреНрдпрд╛рд╕рд╛рдареА AWS request рдЪреА рд╕рд╣реА (SigV4) рддрдкрд╛рд╕рддреЛ; рдордЧ рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ рдХрд╛ рд╣реЗ IAM policies рдард░рд╡рддрд╛рдд. рд╣реА рджреЛрди рд╡реЗрдЧрд│реА рдХрд╛рдореЗ рдЖрд╣реЗрдд.
- Default deny тАФ allow рдХрд░рдгрд╛рд░реА policy рдирд╕реЗрд▓ рддрд░ рдкреНрд░рддреНрдпреЗрдХ request рдирд╛рдХрд╛рд░рд▓реА рдЬрд╛рддреЗ. Demo
рдпрд╛рд▓рд╛
IMPLICIT DENYрдореНрд╣рдгрддреЛ. - Root user тАФ account рдЪрд╛ email рдЖрдгрд┐ password рдЕрд╕рд▓реЗрд▓рд╛ рдорд╛рд▓рдХ. рддреНрдпрд╛рд▓рд╛ policies рдЬреЛрдбрддрд╛
рдпреЗрдд рдирд╛рд╣реАрдд рдЖрдгрд┐ identity policies рддреНрдпрд╛рд▓рд╛ рдорд░реНрдпрд╛рджрд╛ рдШрд╛рд▓рдд рдирд╛рд╣реАрдд; рдлрдХреНрдд Organizations SCP (member
account рдордзреНрдпреЗ) рдХрд┐рдВрд╡рд╛ resource policy рдордзрд▓рд╛ рд╕реНрдкрд╖реНрдЯ
DenyрддреНрдпрд╛рд▓рд╛ рд░реЛрдЦреВ рд╢рдХрддреЛ. рддреЛ рдЬрд╡рд│рдЬрд╡рд│ рдХрд╢рд╛рд╕рд╛рдареАрдЪ рд╡рд╛рдкрд░реВ рдирдХрд╛: MFA рдЪрд╛рд▓реВ рдХрд░рд╛, access keys рдмрдирд╡реВ рдирдХрд╛, рддреНрдпрд╛рд▓рд╛ рддрд┐рдЬреЛрд░реАрдд рдмрдВрдж рдХрд░реВрди рдареЗрд╡рд╛. - CloudTrail тАФ рдиреЛрдВрджрд╡рд╣реА: рдХреЛрдг, рдХрд╛рдп, рдХрд╢рд╛рд╡рд░, рдХреЗрд╡реНрд╣рд╛, рдХреБрдареВрди, рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ рдХрд╛рдп.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг cloud рдореНрд╣рдгрдЬреЗ рдПрдХ рдореЛрдард╛ API рдЖрд╣реЗ, рдЖрдгрд┐ рдЬреЛ рддреЛ call рдХрд░реВ рд╢рдХрддреЛ рддреЛ рдХрд╛рд╣реАрд╣реА рдмрдирд╡реВ, рд╡рд╛рдЪреВ рдХрд┐рдВрд╡рд╛ delete рдХрд░реВ рд╢рдХрддреЛ. рдлреБрдЯрд▓реЗрд▓реНрдпрд╛ keys, рдЧрд░рдЬреЗрдкреЗрдХреНрд╖рд╛ рд░реБрдВрдж policies рдЖрдгрд┐ рд╡рд╛рдЯреВрди рдШреЗрддрд▓реЗрд▓реЗ logins рд╣реЗ рдЦрд▒реНрдпрд╛ cloud breaches рдкреИрдХреА рдореЛрдареНрдпрд╛ рднрд╛рдЧрд╛рдорд╛рдЧреЗ рдЕрд╕рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ request рдЬреНрдпрд╛рддреВрди рдЬрд╛рддреЗ рдЕрд╕реЗ IAM рд╣реЗ рдПрдХрдЪ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЖрд╣реЗ тАФ рддреЗ рдмрд░реЛрдмрд░ рдареЗрд╡рд╛, рдореНрд╣рдгрдЬреЗ рдмрд╛рдХреА рдкреНрд░рддреНрдпреЗрдХ service рд▓рд╛ рддреЗ рд╕рдВрд░рдХреНрд╖рдг рдЖрдкреЛрдЖрдк рдорд┐рд│рддреЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
iam/demo.py рдордзрд▓рд╛ why() рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рд▓рд╛ рдПрдХ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рддреЛ тАФ рдЕрдЬреВрди рдПрдХрд╣реА policy
рдирд╕рд▓реЗрд▓реНрдпрд╛ aishwarya рд▓рд╛ рдПрдХ report рд╡рд╛рдЪрд╛рдпрдЪрд╛ рдЖрд╣реЗ тАФ рдЖрдгрд┐
iam/evaluate.py рдордзрд▓реНрдпрд╛ decide() рдЪрд╛ рдирд┐рд░реНрдгрдп print рдХрд░рддреЛ. decide() рдПрдХ рдЬреЛрдбреА рдкрд░рдд рджреЗрддреЛ: рдирд┐рд░реНрдгрдп рдЖрдгрд┐
рдХрд╛рд░рдг.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 iam/demo.py why
python3 - <<'EOF'
import sys; sys.path.insert(0, "iam"); from evaluate import decide
me = "arn:aws:iam::111122223333:user/aishwarya"
for action, res in [("s3:GetObject", "arn:aws:s3:::school-reports/term1.pdf"), ("ec2:RunInstances", "*"), ("iam:CreateUser", "*")]:
print(action.ljust(18), decide(me, action, res))
EOF
python3 iam/test_iam.py
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд) тАФ "рдореА рдХреЛрдг рдЖрд╣реЗ?", рдЬреНрдпрд╛рд▓рд╛ рдХреЛрдгрддреАрдЪ рдкрд░рд╡рд╛рдирдЧреА рд▓рд╛рдЧрдд рдирд╛рд╣реА рдЕрд╕рд╛ рдПрдХрдореЗрд╡ call:
aws sts get-caller-identity
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
why рд╣реЗ print рдХрд░рддреЛ: ЁЯЪл aishwarya, no policies yet тЖТ s3:GetObject IMPLICIT DENY тАФ no policy allows it тАФ AWS denies by default.
рддреБрдордЪрд╛ snippet рддреАрдЪ рдЬреЛрдбреА рддреАрди рд╡реЗрд│рд╛ print рдХрд░рддреЛ:
s3:GetObject, ec2:RunInstances рдЖрдгрд┐ iam:CreateUser рд╕рд╛рдареА
('IMPLICIT DENY', 'no policy allows it тАФ AWS denies by default'). Tests рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА 12/12 passed рдпреЗрддреЗ. рдЦрд▒реНрдпрд╛
account рд╡рд░ get-caller-identity рддреБрдордЪрд╛ UserId, Account рдЖрдгрд┐ Arn рдкрд░рдд рджреЗрддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рдкреНрд░рддреНрдпреЗрдХ request рд╣рд╛ рдХреЛрдг / рдХрд╛рдп / рдХрд╢рд╛рд╡рд░ рдЕрд╕рд╛ рдкреНрд░рд╢реНрди рдЕрд╕рддреЛ, рдЖрдгрд┐ рдХреЛрдгрддрд╛рд╣реА рдирд┐рдпрдо рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдирд╕реЗрд▓ рддрд░ рдЙрддреНрддрд░ рдирд╛рд╣реА рдЕрд╕рддреЗ тАФ рдкреНрд░рддреНрдпреЗрдХ action рд╕рд╛рдареА, рддреА рдХрд┐рддреАрд╣реА рдирд┐рд░реБрдкрджреНрд░рд╡реА рдЕрд╕рд▓реА рддрд░реА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рд░реЛрдЬрдЪреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА root user рд╡рд╛рдкрд░рдгреЗ (рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА access keys рдмрдирд╡рдгреЗ)
- "console рдордзреНрдпреЗ login рдЭрд╛рд▓реЗ" рдореНрд╣рдгрдЬреЗ "рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ" рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ login рдореНрд╣рдгрдЬреЗ рдХреЛрдг, policies рдореНрд╣рдгрдЬреЗ рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ рдХрд╛
- рдПрдХрдЪ login рдЕрдиреЗрдХрд╛рдВрдиреА рд╡рд╛рдЯреВрди рдШреЗрдгреЗ тАФ рдордЧ рдиреЛрдВрджрд╡рд╣реА рдХреЛрдгреА рдХрд╛рдп рдХреЗрд▓реЗ рддреЗ рд╕рд╛рдВрдЧреВ рд╢рдХрдд рдирд╛рд╣реА
evaluate.pyрд▓рд╛ рдЦрд░реА рдЧреЛрд╖реНрдЯ рд╕рдордЬрдгреЗ тАФ рддреЗ рдПрдХ model рдЖрд╣реЗ; рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп Policy Simulator рдЪрд╛
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ AWS security review рдЪреА рд╕реБрд░реБрд╡рд╛рдд IAM рдиреЗ рд╣реЛрддреЗ: root user MFA рд╕рд╣ рддрд┐рдЬреЛрд░реАрдд рдмрдВрдж рдЖрд╣реЗ рдХрд╛, рдХреЛрдг рдХрд╛рдп рдХрд░реВ рд╢рдХрддреЛ, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ region рдордзреНрдпреЗ CloudTrail рдЪрд╛рд▓реВ рдЖрд╣реЗ рдХрд╛? рдпрд╛ рддреАрди рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреНрдпрд╛, рдореНрд╣рдгрдЬреЗ рдмрд╣реБрддреЗрдХ "рдЖрдордЪреНрдпрд╛рд╡рд░ breach рдЭрд╛рд▓рд╛" рдЕрд╢рд╛ рдХрдерд╛ рд╕реБрд░реВрдЪ рд╣реЛрдд рдирд╛рд╣реАрдд.
тПня╕П рдкреБрдвреЗ
рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рд▓рд╛ рдХрд╛рд░реНрдбреЗ рджреНрдпрд╛рдпрд▓рд╛ рдХреЛрдгреАрддрд░реА рд╣рд╡реЗ. Users, groups рдЖрдгрд┐ root тАФ рдУрд│рдЦрдкрддреНрд░ рдХреЛрдгрд╛рд▓рд╛ рдорд┐рд│рддреЗ, рдЖрдгрд┐ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рд╡реНрдпрдХреНрддреАрдХрдбреЗ рдирд╛рд╣реА рддрд░ рдпрд╛рджреАрдХрдбреЗ рдХрд╛ рдЕрд╕рддрд╛рдд.
git checkout lesson-02-users-groups-root