ЁЯз╛ рдзрдбрд╛ 12 тАФ Audit рдЖрдгрд┐ incident response: рдиреЛрдВрджрд╡рд╣реА рдЖрдгрд┐ рдкрд╣рд┐рд▓рд╛ рддрд╛рд╕
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 12 тАФ рд╢реЗрд╡рдЯрдЪрд╛ рдзрдбрд╛! ┬╖ рдорд╛рдЧреАрд▓: lesson-11-least-privilege
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕, рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪрд╛ рдЯрдкреНрдкрд╛: auditor рд╕рд╛рд░рдЦрд╛ credential report (iam/data/credential-report.csv) рд╡рд╛рдЪрдгреЗ, CloudTrail рдордзреНрдпреЗ рдЪреЛрд░рд▓реЗрд▓реА key рдУрд│рдЦрдгреЗ (iam/data/cloudtrail.json), рдЖрдгрд┐ рдлреБрдЯрд▓реЗрд▓реНрдпрд╛ key рдЪреНрдпрд╛ incident рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рддрд╛рд╕рд╛рд╕рд╛рдареА runbook.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рджрд░ рд╢реБрдХреНрд░рд╡рд╛рд░реА рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдиреЛрдВрджреА рд╡рд╛рдЪрддреЗ: рдХреЛрдгрд╛рдХрдбреЗ рдХрд╛рд░реНрдб рдЖрд╣реЗ, рдХреЛрдгрд╛рдХрдбреЗ рдЬрд╛рджрд╛ рдЪрд╛рд╡реА рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд╡реА рдХрд┐рддреА рдЬреБрдиреА рдЖрд╣реЗ, рдХреЛрдгреА рджреБрд╕рд░реЗ рдХреБрд▓реВрдк рдХрдзреАрдЪ рд▓рд╛рд╡рд▓реЗ рдирд╛рд╣реА. рдЬреБрдиреНрдпрд╛ рдЪрд╛рд╡реНрдпрд╛ рдЖрдгрд┐ рдирд╕рд▓реЗрд▓реА рдХреБрд▓рдкреЗ рджреБрд░реБрд╕реНрдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдпрд╛рджреАрдд рдЬрд╛рддрд╛рдд.
рдПрдХрд╛ рд░рд╛рддреНрд░реА рдиреЛрдВрджрд╡рд╣реАрдд рдХрд╛рд╣реАрддрд░реА рд╡рд┐рдЪрд┐рддреНрд░ рджрд┐рд╕рддреЗ: рдХрддрд░рд┐рдирд╛рдЪреА рдЪрд╛рд╡реА, рдЬреА рдлрдХреНрдд рд╕рдХрд╛рд│реА рд╢рд╛рд│реЗрддрдЪ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ, рддреА рд░рд╛рддреНрд░реА 2 рд╡рд╛рдЬрддрд╛ рджреБрд╕рд▒реНрдпрд╛ рд╢рд╣рд░рд╛рддреВрди рд╡рд╛рдкрд░рд▓реА рдЧреЗрд▓реА, рдЖрдгрд┐ рдХрддрд░рд┐рдирд╛ рдХрдзреАрдЪ рдЬрд╛рдд рдирд╛рд╣реА рдЕрд╢рд╛ рдЦреЛрд▓реНрдпрд╛ рдЙрдШрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдЭрд╛рд▓рд╛. рджрд╛рд░рд╛рдВрдиреА рдирд╛рд╣реА рдореНрд╣рдЯрд▓реЗ тАФ рдкрдг рдкреБрдврдЪреЗ рджрд╛рд░ рдХрд╛рдп рдореНрд╣рдгрддреЗ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдпрд╛рд▓рдп рдерд╛рдВрдмрдд рдирд╛рд╣реА. рддреЗ:
- рдЪрд╛рд╡реА рдмрдВрдж рдХрд░рддреЗ, 2. рддрд┐рдЪреНрдпрд╛рдиреЗ рдЖрдзреАрдЪ рджрд┐рд▓реЗрд▓реЗ рд╕рдЧрд│реЗ рдкрд╛рд╕ рд░рджреНрдж рдХрд░рддреЗ,
- рдЕрдиреЛрд│рдЦреА рд╡реНрдпрдХреНрддреАрдиреЗ рдХрд╢рд╛рд▓рд╛ рд╣рд╛рдд рд▓рд╛рд╡рд▓рд╛ рддреЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрдд рдлрд┐рд░рддреЗ, 4. рдХрддрд░рд┐рдирд╛рд▓рд╛ рдирд╡реА рдЪрд╛рд╡реА рджреЗрддреЗ,
- рдЪрд╛рд╡реА рдмрд╛рд╣реЗрд░ рдХрд╢реА рдЧреЗрд▓реА рддреЗ рд╢реЛрдзреВрди рдХрд╛рдврддреЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
cr["ЁЯУЛ credential report<br/>katrina: no MFA ┬╖ key 329 days"]
ct["ЁЯЪи CloudTrail<br/>AKIAEXAMPLEKATRINA01 ┬╖ 02:03 ┬╖ us-east-1 ┬╖ new IP<br/>GetCallerIdentity ┬╖ RunInstances ┬╖ CreateUser"]
k1["1 deactivate the key"]
k2["2 revoke sessions"]
k3["3 find what it created"]
k4["4 rotate"]
k5["5 find how it leaked"]
cr -.->|"weekly"| ct
ct --> k1 --> k2 --> k3 --> k4 --> k5
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/iam/lesson-diagrams.html#l12
тЭУ рдХрд╛рдп
- Credential report тАФ рдкреНрд░рддреНрдпреЗрдХ IAM user (рдЖрдгрд┐ root user) рд╕рд╛рдареА рдПрдХ CSV рдУрд│: password
рдЪрд╛рд▓реВ рдЖрд╣реЗ рдХрд╛ рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪрд╛ рдХрдзреА рд╡рд╛рдкрд░рд▓рд╛, MFA рдЪрд╛рд▓реВ рдЖрд╣реЗ рдХрд╛, рдкреНрд░рддреНрдпреЗрдХ access key рдЪреА рд╕реНрдерд┐рддреА, рд╢реЗрд╡рдЯрдЪреЗ rotate рдХрдзреА рдХреЗрд▓реЗ, рд╢реЗрд╡рдЯрдЪреНрдпрд╛
рд╡рд╛рдкрд░рд╛рдЪреА рддрд╛рд░реАрдЦ, region рдЖрдгрд┐ service. рдпрд╛ repo рдордзреАрд▓ рдирдореБрдиреНрдпрд╛рдд рддреНрдпрд╛рдкреИрдХреА рд╕рд╣рд╛ columns рдареЗрд╡рд▓реЗ рдЖрд╣реЗрдд.
рддреЛ
generate-credential-reportрдиреЗ рддрдпрд╛рд░ рдХрд░рд╛. - Auditors рдХрд╢рд╛рд╡рд░ рдмреЛрдЯ рдареЗрд╡рддрд╛рдд тАФ keys рдЕрд╕рд▓реЗрд▓рд╛ рдХрд┐рдВрд╡рд╛ MFA рдирд╕рд▓реЗрд▓рд╛ root; MFA рдирд╕рд▓реЗрд▓реЗ console users; 90 рджрд┐рд╡рд╕рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬреБрдиреНрдпрд╛ keys; 90 рджрд┐рд╡рд╕ рди рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ keys (рддреНрдпрд╛ delete рдХрд░рд╛); рдХрд╛рд╣реАрдЪ activity рдирд╕рд▓реЗрд▓реЗ users.
- CloudTrail тАФ рдкреНрд░рддреНрдпреЗрдХ API call рдЪреЗ management events (рдХреЛрдг, key, action,
region, source IP, error code) default рдиреЗ 90 рджрд┐рд╡рд╕ Event history рдордзреНрдпреЗ рдиреЛрдВрджрд╡рддреЛ; S3 рдХрдбреЗ рдЬрд╛рдгрд╛рд░рд╛
trail рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рддрд┐рддрдХреЗ рджрд┐рд╡рд╕ рдареЗрд╡рддреЛ. Data events (рдЬрд╕реЗ
s3:GetObject) рдЪрд╛рд▓реВ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддрд╛рдд. - рдЪреЛрд░рд▓реЗрд▓реНрдпрд╛ key рдЪреА рд▓рдХреНрд╖рдгреЗ тАФ рдирд╡рд╛ source IP рдХрд┐рдВрд╡рд╛ region, рд╡рд┐рдЪрд┐рддреНрд░ рд╡реЗрд│, рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛
GetCallerIdentity(рдХреЛрдгрддреНрдпрд╛рд╣реА permission рдЪреА рдЧрд░рдЬ рдирд╕рд▓реЗрд▓рд╛ "рдореА рдХреЛрдг?" call), рдордЧAccessDeniedрдЪрд╛рдЪрдкрдгреНрдпрд╛рдВрдЪрд╛ рднрдбрд┐рдорд╛рд░ тАФ рди рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ regions рдордзреНрдпреЗRunInstances,CreateUser. GuardDuty рдиреЗрдордХреНрдпрд╛ рдпрд╛рдЪ patterns рд╕рд╛рдареА findings рджреЗрддреЛ. - Runbook тАФ (1)
update-access-key --status Inactive; (2) sessions revoke рдХрд░рд╛: рдЖрдзреАрдЪ рджрд┐рд▓реЗрд▓реА рддрд╛рддреНрдкреБрд░рддреА credentials рд╕рдВрдкреЗрдкрд░реНрдпрдВрдд рд╡реИрдз рд░рд╛рд╣рддрд╛рдд, рдореНрд╣рдгреВрдиaws:TokenIssueTimeрд╕рд╣ рдПрдХ Deny рдЬреЛрдбрд╛ (roles рд╕рд╛рдареА console рдЪреЗ Revoke active sessions рд╣реЗрдЪ рдХрд░рддреЗ); (3) key рдиреЗ рдЬреЗ рдХрд╛рд╣реА рдмрдирд╡рд▓реЗ тАФ users, keys, roles, instances тАФ рддреЗ access key ID рдиреЗ CloudTrail рдордзреНрдпреЗ рд╢реЛрдзрд╛; (4) рдирд╡реА credentials рджреНрдпрд╛ тАФ рддреНрдпрд╛рд╣реВрди рдЪрд╛рдВрдЧрд▓реЗ, roles рдХрдбреЗ рд╡рд│рд╛; (5) рдЧрд│рддреА рд╢реЛрдзрд╛ (git commit, log, laptop) рдЖрдгрд┐ рдХрд╛рд░рдг рджреБрд░реБрд╕реНрдд рдХрд░рд╛.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдкреНрд░рддрд┐рдмрдВрдз рдХрдзреАрдЪ рдкрд░рд┐рдкреВрд░реНрдг рдирд╕рддреЛ. Credentials public repos рдордзреВрди рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рдлреБрдЯрддрд╛рдд, рдЖрдгрд┐ attackers рдкреБрдврдЪреЗ рдХрд╛рдо automate рдХрд░рддрд╛рдд. рдШрд╛рдмрд░рд╡рдгрд╛рд░рд╛ рдкреНрд░рд╕рдВрдЧ рдЖрдгрд┐ рдЖрдкрддреНрддреА рдпрд╛рдВрдЪреНрдпрд╛рддрд▓рд╛ рдлрд░рдХ рдореНрд╣рдгрдЬреЗ рдХреЛрдгреА рдХрд┐рддреА рд▓рд╡рдХрд░ рдиреЛрдВрджрд╡рд╣реА рд╡рд╛рдЪрддреЗ рдЖрдгрд┐ рдкрд╣рд┐рд▓реНрдпрд╛ рддрд╛рд╕рд╛рдЪрд╛ рдХрд┐рддреА рд╕рд░рд╛рд╡ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
iam/demo.py рдордзреАрд▓ audit() credential report рд╡рд╛рдЪрддреЗ (рдард░рд▓реЗрд▓реНрдпрд╛
рддрд╛рд░рдЦреЗрд▓рд╛, 2026-09-27, рдореНрд╣рдгрдЬреЗ рдЖрдХрдбреЗ рдХрдзреАрдЪ рдмрджрд▓рдд рдирд╛рд╣реАрдд) рдЖрдгрд┐ MFA рдирд╕рд▓реЗрд▓реЗ passwords, 90 рджрд┐рд╡рд╕рд╛рдВрдкреЗрдХреНрд╖рд╛
рдЬреБрдиреНрдпрд╛ keys рдЖрдгрд┐ 90 рджрд┐рд╡рд╕ рди рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ keys рд╡рд░ рдмреЛрдЯ рдареЗрд╡рддреЗ. рдордЧ рддреЗ CloudTrail events рд╡рд╛рдЪрддреЗ,
рдЖрджрд▓реНрдпрд╛ рджрд┐рд╡рд╕рд╛рд╡рд░реВрди katrina рдЪреЗ рдиреЗрд╣рдореАрдЪреЗ IPs рд╢рд┐рдХрддреЗ, рдЖрдгрд┐ рдирд╡реНрдпрд╛ IP рдордзреВрди рдЖрд▓реЗрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ event рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 iam/demo.py audit
python3 - <<'EOF'
import csv, json
from datetime import date
today = date(2026, 9, 27)
for r in csv.DictReader(open("iam/data/credential-report.csv")):
if r["access_key_1_active"] == "true":
print(r["user"].ljust(9), "key age", (today - date.fromisoformat(r["access_key_1_last_rotated"])).days, "days")
events = json.load(open("iam/data/cloudtrail.json"))
key = [e for e in events if e["accessKey"] == "AKIAEXAMPLEKATRINA01"]
print("AKIAEXAMPLEKATRINA01 used from:", sorted({e["sourceIPAddress"] for e in key}), "in", sorted({e["awsRegion"] for e in key}))
print("denied calls:", [e["eventName"] for e in key if e.get("errorCode")])
EOF
python3 iam/test_iam.py
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд) тАФ рдЖрдзреА audit, рдордЧ рдкрд╣рд┐рд▓рд╛ рддрд╛рд╕:
aws iam generate-credential-report
aws iam get-credential-report --query Content --output text | base64 --decode > credential-report.csv
aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIAEXAMPLEKATRINA01 --max-results 50
aws iam update-access-key --user-name katrina --access-key-id AKIAEXAMPLEKATRINA01 --status Inactive
cat > revoke-older-sessions.json <<'JSON'
{"Version": "2012-10-17", "Statement": [{"Effect": "Deny", "Action": "*", "Resource": "*",
"Condition": {"DateLessThan": {"aws:TokenIssueTime": "2026-09-27T03:00:00Z"}}}]}
JSON
aws iam put-user-policy --user-name katrina --policy-name revoke-older-sessions --policy-document file://revoke-older-sessions.json
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
audit <root_account>, aishwarya рдЖрдгрд┐ ci-robot рд╕рд╛рдареА тЬЕ рдЫрд╛рдкрддреЗ;
тЪая╕П katrina password without MFA, key 329 days old;
тЪая╕П dipika password without MFA, key 931 days old, key unused > 90 days тЖТ delete;
рдордЧ рд╕рд╣рд╛ CloudTrail рдУрд│реА, рдЬреНрдпрд╛рдд 198.51.100.77 рдордзреВрди рдЖрд▓реЗрд▓реНрдпрд╛ katrina рдЪреНрдпрд╛ рддреАрди events рд╡рд░ ЁЯЪи рдЕрд╕рддреЗ
(GetCallerIdentity, sa-east-1 рдордзреНрдпреЗ RunInstances рдЖрдгрд┐ CreateUser, рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рджреЛрдиреНрд╣реАрдВрд╡рд░
AccessDenied), рдЖрдгрд┐ рдкрд╛рдЪ рдкрд╛рдпрд▒реНрдпрд╛рдВрдЪрд╛ runbook. рддреБрдордЪрд╛ snippet key рдЪреЗ рд╡рдп 329, 931 рдЖрдгрд┐
28 рджрд┐рд╡рд╕ (katrina, dipika, ci-robot), рддреАрди regions рдордзрд▓реЗ key рдЪреЗ рджреЛрди IPs, рдЖрдгрд┐
denied calls: ['RunInstances', 'CreateUser'] рдЫрд╛рдкрддреЛ. Tests рд╢реЗрд╡рдЯреА 12/12 passed рджрд╛рдЦрд╡рддрд╛рдд.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдиреЛрдВрджреА auditor рд╕рд╛рд░рдЦреНрдпрд╛ рд╡рд╛рдЪреВ рд╢рдХрддрд╛, рдкрд╣рд┐рд▓реНрдпрд╛ рдХрд╛рд╣реА calls рд╡рд░реВрдирдЪ рдЪреЛрд░рд▓реЗрд▓реА key рдУрд│рдЦреВ рд╢рдХрддрд╛, рдЖрдгрд┐ рдкрд╣рд┐рд▓рд╛ рддрд╛рд╕ рдпреЛрдЧреНрдп рдХреНрд░рдорд╛рдиреЗ рд╣рд╛рддрд╛рд│реВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- key deactivate рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА рдЖрдзреА delete рдХрд░рдгреЗ тАФ deactivate рдХрд░рдгреЗ рдЙрд▓рдЯрд╡рддрд╛ рдпреЗрддреЗ рдЖрдгрд┐ рдкреБрд░рд╛рд╡рд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░рд╛рд╣рддреЛ
- key deactivate рдХрд░рдгреЗ рдЖрдгрд┐ рддрд┐рдЪреНрдпрд╛рдиреЗ рдЖрдзреАрдЪ рджрд┐рд▓реЗрд▓реЗ sessions рд╡рд┐рд╕рд░рдгреЗ
- CloudTrail рдлрдХреНрдд рдПрдХрд╛рдЪ region рдордзреНрдпреЗ, рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд 90 рджрд┐рд╡рд╕рд╛рдВрдЪреА event history тАФ рдирдВрддрд░ рд╢реЛрдзрд╛рдпрд▓рд╛ trail рдирд╛рд╣реА
- key rotate рдХрд░рдгреЗ рдкрдг рддреА рдХрд╢реА рдлреБрдЯрд▓реА рддреЗ рди рд╢реЛрдзрдгреЗ тАФ рддреА рдкреБрдиреНрд╣рд╛ рдлреБрдЯрддреЗ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рд╕рд░рд╛рд╡ рдХреЗрд▓реЗрд▓рд╛, рд╡рд░реАрд▓ patterns рд╡рд░ GuardDuty alert рджреЗрдгрд╛рд░рд╛ рдлреБрдЯрд▓реЗрд▓реНрдпрд╛ key рдЪрд╛ runbook AWS рдЪрд╛рд▓рд╡рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ team рд╕рд╛рдареА рдиреЗрд╣рдореАрдЪрд╛ рдЖрд╣реЗ. рдкрд╛рдпрд░реА 4 рдЪреА рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрд╡реГрддреНрддреА рдореНрд╣рдгрдЬреЗ "рдлреБрдЯрд╛рдпрд▓рд╛ рджреАрд░реНрдШрдХрд╛рд│рд╛рдЪреА key рдирд╡реНрд╣рддреАрдЪ" тАФ рдзрдбреЗ 05, 06 рдЖрдгрд┐ 10.
ЁЯОУ рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЖрддрд╛ рддреБрдордЪреЗ рдЖрд╣реЗ
рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп тЖТ рдХрд╛рд░реНрдбреЗ рдЖрдгрд┐ рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреНрдпрд╛ тЖТ рд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо тЖТ deny рдЬрд┐рдВрдХрддреЛ тЖТ рдХрд╛рд░реНрдбреЗ рдирд╡реНрд╣реЗ, рдЯреЛрдкреНрдпрд╛ тЖТ secrets рдирд╕рд▓реЗрд▓реЗ badges тЖТ "рдлрдХреНрдд рддреЗрд╡реНрд╣рд╛рдЪтАж" тЖТ рдЫрддреЗ тЖТ рджреЛрди рджрд░рд╡рд╛рдЬреЗ, рджреЛрди рдЪрд╛рд╡реНрдпрд╛ тЖТ рдПрдХрдЪ front desk тЖТ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рддреЗрд╡рдвреЗрдЪ рдареЗрд╡рд╛ тЖТ рдиреЛрдВрджрд╡рд╣реА рдЖрдгрд┐ рдкрд╣рд┐рд▓рд╛ рддрд╛рд╕. рддреБрдореНрд╣реА рдлрдХреНрдд IAM рд╢рд┐рдХрд▓рд╛ рдирд╛рд╣реАрдд тАФ рддреБрдореНрд╣реА рдУрд│рдЦрдкрддреНрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛. ЁЯккЁЯОУ
рд╢рд╛рд│реЗрддреАрд▓ рдкреБрдврдЪреА рджрд╛рд░реЗ: AWS school рдпрд╛ policies рдЬреНрдпрд╛ services рдЪреЗ рд░рдХреНрд╖рдг рдХрд░рддрд╛рдд рддреНрдпрд╛ рдмрдирд╡рддреЗ; CI/CD school рдзрдбрд╛ 06 рдЪрд╛ OIDC role рдЦрд▒реНрдпрд╛ pipeline рдордзреНрдпреЗ рдХрд╛рдорд╛рд▓рд╛ рд▓рд╛рд╡рддреЗ; Kubernetes school рдордзреНрдпреЗ IRSA рдЖрдгрд┐ Pod Identity рд░рд╛рд╣рддрд╛рдд.
git checkout main
python3 iam/demo.py # one last run, for fun