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

ЁЯФС рдзрдбрд╛ 09 тАФ Connecting: рджрд╛рд░рд╛рдЪреА рдЪрд╛рд╡реА рд╡рд┐рд░реБрджреНрдз рд╕реЛрдмрддреАрдиреЗ рдХреЗрд▓реЗрд▓реА рднреЗрдЯ

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдорд╛рдЧреЗ: lesson-08-types-pricing ┬╖ рдкреБрдвреЗ: lesson-10-security-groups


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

рдзрдбреЗ 01тАУ08, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд: рддреБрдордЪреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ shell рдорд┐рд│рд╡рдгреЗ тАФ рдХреНрд▓рд╛рд╕рд┐рдХ рдорд╛рд░реНрдЧ (SSH + key pairs) рдЖрдгрд┐ рдЖрдзреБрдирд┐рдХ рдорд╛рд░реНрдЧ (SSM Session Manager).

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

рддреБрдордЪреНрдпрд╛ рдмрд╛рдХрд╛рд▓рд╛ screen рдирд╛рд╣реА тАФ рдордЧ рддреБрдореНрд╣реА рддреНрдпрд╛рд╡рд░ рдмрд╕рдгрд╛рд░ рдХрд╕реЗ? рдЗрдорд╛рд░рддреАрдд рдЬрд╛рдгреНрдпрд╛рдЪреЗ рджреЛрди рдорд╛рд░реНрдЧ:

рдорд╛рд░реНрдЧ 1 тАФ рджрд╛рд░рд╛рдЪреА рдЪрд╛рд╡реА ЁЯФС (SSH). рдмрд╛рдХ рднрд╛рдбреНрдпрд╛рдиреЗ рдШреЗрддрд╛рдирд╛ рддреБрдореНрд╣реА AWS рд▓рд╛ рдПрдХ рдХреБрд▓реВрдк рджреЗрддрд╛ (рддреБрдордЪреА public key); AWS рддреЗ рдмрд╛рдХрд╛рд▓рд╛ рдкрдХреНрдХреЗ рдмрд╕рд╡рддреЗ. рддреНрдпрд╛рд▓рд╛ рдЬреБрд│рдгрд╛рд░реА рдЪрд╛рд╡реА (рддреБрдордЪреА private key) рддреБрдордЪрд╛ рдЦрд┐рд╕рд╛ рдХрдзреАрдЪ рд╕реЛрдбрдд рдирд╛рд╣реА. рджрд╛рд░ 22 рд╡рд░ рдпрд╛, рддреБрдордЪреА рдЪрд╛рд╡реА рддреБрдордЪреНрдпрд╛ рдХреБрд▓рдкрд╛рд▓рд╛ рдмрд╕рддреЗ, рддреБрдореНрд╣реА рдЖрдд.

рд▓реЛрдХрд╛рдВрдирд╛ рдЪрд╛рд╡рдгрд╛рд▒реНрдпрд╛ рдмрд╛рд░реАрдХ рдЕрдЯреА:

рдорд╛рд░реНрдЧ 2 тАФ рд╕реЛрдмрддреАрдиреЗ рдХреЗрд▓реЗрд▓реА рднреЗрдЯ ЁЯЫЧ (SSM Session Manager). рдЙрдШрдбреЗ рджрд╛рд░рдЪ рдирд╛рд╣реА. рддреБрдореНрд╣реА рдкреБрдврдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рд▓рд╛ рд╡рд┐рдЪрд╛рд░рддрд╛ (AWS рдЪрд╛ API, рдЬреЛ рддреБрдордЪреЗ IAM рдХрд╛рд░реНрдб рддрдкрд╛рд╕рддреЛ); рдХрд╛рд░реНрдпрд╛рд▓рдп рдмрд╛рдХрд╛рдЪреНрдпрд╛ рдЕрдВрдЧрднреВрдд рд╕рд╣рд╛рдпреНрдпрдХрд╛рд▓рд╛ рдлреЛрди рдХрд░рддреЗ (SSM agent, рдЬреНрдпрд╛рд▓рд╛ рдзрдбрд╛ 05 рдордзрд▓реА рдмрд╛рдХрд╛рдЪреА рдЯреЛрдкреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ); рд╕рд╣рд╛рдпреНрдпрдХ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдВрдЪреНрдпрд╛ corridor рдордзреВрди рдЖрдд рдШреЗрдКрди рдЬрд╛рддреЛ. Port рдирд╛рд╣реА, key file рдирд╛рд╣реА, рдЖрдгрд┐ рдиреЛрдВрджрд╡рд╣реА рд╕рдВрдкреВрд░реНрдг рднреЗрдЯ рдиреЛрдВрджрд╡рддреЗ тАФ рд╢рд╛рд│реЗрд▓рд╛ рд╣рд╡реЗ рдЕрд╕реЗрд▓ рддрд░ keystrokes рд╕реБрджреНрдзрд╛.

рдЖрдзреБрдирд┐рдХ default: SSM. рдЭрдЯрдкрдЯ рд╡реИрдпрдХреНрддрд┐рдХ labs рд╕рд╛рдареА (рддреБрдордЪреНрдпрд╛ IP рдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд) рдЖрдгрд┐ рднрд░рдкреВрд░ file-copy рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рдорд╛рдВрд╕рд╛рдареА SSH рдЙрддреНрддрдордЪ рд░рд╛рд╣рддреЛ.

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

flowchart LR
    subgraph ssh["ЁЯФС way 1: SSH"]
        key["private key - your pocket<br/>public key - on the desk"]
        p22["ЁЯЪк port 22 open<br/>(only to YOUR IP!)"]
    end
    subgraph ssm["ЁЯЫЧ way 2: SSM"]
        api["front office: AWS API<br/>checks your IAM card"]
        agent["desk assistant: SSM agent<br/>authorized by the desk's hat ЁЯОй"]
    end
    desk["ЁЯЦея╕П a shell on the desk"]
    key --> p22 -->|"1 classic"| desk
    api --> agent -->|"2 no open door, audited"| desk

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

"рдЬрдЧрд╛рд╕рд╛рдареА port 22 рдЙрдШрдбрд╛ + shared pem file" рд╣реЗ internet рд╡рд░рдЪреЗ рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╣рд▓реНрд▓реЗ рд╣реЛрдгрд╛рд░реЗ рджрд╛рд░ рдЖрд╣реЗ тАФ рдкреГрдереНрд╡реАрд╡рд░рдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ scanner рдХрд╛рд╣реА рдорд┐рдирд┐рдЯрд╛рдВрдд рдареЛрдард╛рд╡рддреЛ. IAM рдиреЗ рддрдкрд╛рд╕рд▓реЗрд▓рд╛, рдЙрдШрдбреЗ рджрд╛рд░ рдирд╕рд▓реЗрд▓рд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗрдЪ security teams рдЬреНрдпрд╛рд▓рд╛ "zero inbound" рдореНрд╣рдгрддрд╛рдд. рджреЛрдиреНрд╣реА рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗ рдХреА рддреБрдореНрд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдиреБрд╕рд╛рд░ рдпреЛрдЧреНрдп рдирд┐рд╡рдб рдХрд░рд╛рд▓.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, ~1┬в)

cd ec2 && terraform apply -var my_ip=$(curl -s ifconfig.me)/32   # desk up (lesson 07)

# --- way 2 first: SSM, no key, no open door needed ---
aws ssm start-session --target $(aws ec2 describe-instances \
  --filters Name=tag:Name,Values=school-desk Name=instance-state-name,Values=running \
  --query 'Reservations[0].Instances[0].InstanceId' --output text)
# you're IN. try:  hostname ; whoami ; exit
# (works because ec2.tf attached AmazonSSMManagedInstanceCore to the desk's hat? тАФ
#  if the session refuses: that's your homework, add it to the role ЁЯШЙ)

# --- way 1: classic SSH (needs a key pair added to ec2.tf as an exercise) ---
# ssh -i my-key.pem ec2-user@$(terraform output -raw public_ip)

# ЁЯз╣ the lab rule:
terraform destroy -var my_ip=$(curl -s ifconfig.me)/32

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

aws ssm start-session --target i-тАж security group рдордзреНрдпреЗ port 22 рдЙрдШрдбрд╛ рдирд╕рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ shell рдордзреНрдпреЗ рдиреЗрддреЛ.

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

terraform destroy; рддреБрд▓рдиреЗрд╕рд╛рдареА key pair рдмрдирд╡рд▓реА рдЕрд╕реЗрд▓ рддрд░ рддреА delete рдХрд░рд╛

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

тПня╕П рдкреБрдвреЗ

рддреЛ "рдлрдХреНрдд рддреБрдордЪреНрдпрд╛ IP рд╡рд░реВрди" рджрд╛рд░рд╛рдЪрд╛ рдирд┐рдпрдо рд╕реНрд╡рддрдВрддреНрд░ рдзрдбреНрдпрд╛рд╕ рдкрд╛рддреНрд░ рдЖрд╣реЗ: security groups тАФ рджреНрд╡рд╛рд░рдкрд╛рд▓рд╛рдЪреА рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рдпрд╛рджреА.

git checkout lesson-10-security-groups

ЁЯФС Lesson 09 тАФ Connecting: the door key vs the escorted visit

ЁЯУН You are here: Lesson 09 of 12 ┬╖ Previous: lesson-08-types-pricing ┬╖ Next: lesson-10-security-groups


ЁЯУж What's in this branch

Lessons 01тАУ08, plus: getting a shell on your desk тАФ the classic way (SSH + key pairs) and the modern way (SSM Session Manager).

ЁЯзТ Explain like I'm 5

Your desk has no screen тАФ so how do you sit at it? Two ways into the building:

Way 1 тАФ the door key ЁЯФС (SSH). When renting the desk you hand AWS a padlock (your public key); AWS bolts it to the desk. The matching key (your private key) never leaves your pocket. Show up at door 22, your key fits your padlock, you're in.

Fine print that bites people:

Way 2 тАФ the escorted visit ЁЯЫЧ (SSM Session Manager). No open door at all. You ask the front office (AWS's API, checking your IAM card); the office phones the desk's built-in assistant (the SSM agent, which the desk's hat from lesson 05 authorizes); the assistant walks you in through the staff corridor. No port, no key file, and the logbook records the whole visit тАФ keystrokes included, if the school wants.

Modern default: SSM. SSH remains great for quick personal labs (locked to YOUR IP) and file-copy-heavy workflows.

ЁЯЧ║я╕П Diagram

flowchart LR
    subgraph ssh["ЁЯФС way 1: SSH"]
        key["private key - your pocket<br/>public key - on the desk"]
        p22["ЁЯЪк port 22 open<br/>(only to YOUR IP!)"]
    end
    subgraph ssm["ЁЯЫЧ way 2: SSM"]
        api["front office: AWS API<br/>checks your IAM card"]
        agent["desk assistant: SSM agent<br/>authorized by the desk's hat ЁЯОй"]
    end
    desk["ЁЯЦея╕П a shell on the desk"]
    key --> p22 -->|"1 classic"| desk
    api --> agent -->|"2 no open door, audited"| desk

тЭУ What

ЁЯдФ Why

"Open port 22 to the world + shared pem file" is the most attacked doorway on the internet тАФ every scanner on Earth knocks within minutes. The IAM-checked, no-open-door path is what security teams mean by "zero inbound". Knowing both, you'll pick correctly per situation.

ЁЯзк Try it (~10 min, ~1┬в)

cd ec2 && terraform apply -var my_ip=$(curl -s ifconfig.me)/32   # desk up (lesson 07)

# --- way 2 first: SSM, no key, no open door needed ---
aws ssm start-session --target $(aws ec2 describe-instances \
  --filters Name=tag:Name,Values=school-desk Name=instance-state-name,Values=running \
  --query 'Reservations[0].Instances[0].InstanceId' --output text)
# you're IN. try:  hostname ; whoami ; exit
# (works because ec2.tf attached AmazonSSMManagedInstanceCore to the desk's hat? тАФ
#  if the session refuses: that's your homework, add it to the role ЁЯШЙ)

# --- way 1: classic SSH (needs a key pair added to ec2.tf as an exercise) ---
# ssh -i my-key.pem ec2-user@$(terraform output -raw public_ip)

# ЁЯз╣ the lab rule:
terraform destroy -var my_ip=$(curl -s ifconfig.me)/32

тЬЕ Verify тАФ what you should see

aws ssm start-session --target i-тАж drops you into a shell with no port 22 open in the security group.

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

terraform destroy; delete the key pair if you created one for comparison

тЪая╕П Common mistakes

тПня╕П Next

That "only from YOUR IP" door rule deserves its own lesson: security groups тАФ the gatekeeper's guest list.

git checkout lesson-10-security-groups
тЖР Previoustypes pricingNext тЖТsecurity groups

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