Chapter 17

SSM Session Manager

"SSH 포트를 닫아도 서버에 접속할 수 있습니다. 더 안전하고 편리한 방법으로 ShopEasy 서버를 관리합시다."

학습 목표

  • SSH 접속 방식의 보안 문제점을 이해한다
  • SSM Session Manager의 동작 원리와 장점을 설명할 수 있다
  • EC2에 SSM 권한을 부여하고 Session Manager로 접속할 수 있다
  • SSH 포트(22)를 닫아 공격 표면(Attack Surface)을 줄인다

왜 Session Manager인가?

지금까지 ShopEasy EC2 서버에 접속할 때 SSH(Secure Shell)를 사용했습니다. SSH는 널리 사용되는 접속 방법이지만, 보안 관점에서 여러 문제가 있습니다. AWS Systems Manager의 Session Manager를 사용하면 SSH 없이도 안전하게 서버에 접속할 수 있습니다.

비유로 이해하기: 열쇠 vs 건물 관리실

SSH직접 열쇠로 문을 여는 방식입니다. 열쇠(.pem 파일)를 가지고 다녀야 하고, 열쇠를 분실하거나 복제당하면 누구나 문을 열 수 있습니다. 또한 문(포트 22)이 항상 열려 있어야 합니다.

Session Manager건물 관리실을 통한 원격 잠금 해제 방식입니다. 열쇠가 필요 없고, 관리실(AWS Systems Manager)이 신분(IAM)을 확인한 후 원격으로 문을 열어줍니다. 문은 평소에 완전히 잠겨 있어도 됩니다. 누가 언제 출입했는지 관리실 기록(CloudTrail)에 자동으로 남습니다.

SSH의 문제점

문제설명위험성
포트 22 개방 SSH가 동작하려면 포트 22가 열려 있어야 함 외부 공격자가 포트 스캔으로 SSH 서버를 찾아 공격 시도
.pem 키 파일 관리 접속에 키 파일이 필요하며, 팀원 간 공유 필요 키 파일 분실/유출 시 누구나 서버에 접속 가능
접속 기록 부재 SSH 접속 자체는 AWS CloudTrail에 기록되지 않음 누가 언제 서버에 접속했는지 감사(Audit) 불가
실제 위협: SSH 포트가 열려 있으면

인터넷에는 자동화된 봇이 24시간 SSH 포트(22)를 스캔합니다. EC2 인스턴스를 생성하고 몇 분만 지나면 SSH 무차별 대입 공격(Brute Force)이 시작됩니다. Chapter 07에서 SSH 소스를 내 IP로 제한했지만, 포트 자체가 열려 있다는 것이 공격 표면입니다.

SSH vs Session Manager 비교

항목SSHSession Manager
포트 개방 포트 22 필수 (인바운드 규칙 필요) 인바운드 포트 불필요 (완전히 닫을 수 있음)
인증 방식 .pem 키 파일 IAM 인증 (키 파일 불필요)
접속 기록 OS 레벨 로그만 존재 CloudTrail에 자동 기록 (누가 언제 접속)
접속 방법 터미널에서 ssh 명령어 AWS 콘솔(웹 브라우저) 또는 AWS CLI
네트워크 요구사항 EC2에 퍼블릭 IP 또는 Bastion Host 필요 프라이빗 서브넷에서도 접속 가능 (VPC 엔드포인트 사용 시)
핵심 개념: Session Manager의 동작 원리

Session Manager는 EC2에 설치된 SSM Agent가 AWS Systems Manager 서비스와 아웃바운드(나가는) HTTPS 연결을 유지합니다. 사용자가 세션을 시작하면 이 채널을 통해 연결이 이루어집니다.

인바운드 포트를 열 필요가 없는 이유는, EC2가 먼저 AWS로 연결을 시작하기 때문입니다(아웃바운드). 외부에서 EC2로 들어오는 것이 아니라, EC2가 AWS에 "준비됐습니다"라고 알려주는 방식입니다.

실습: SSM Session Manager로 서버 접속하기

시작 전 확인사항
  • AWS 콘솔에 로그인되어 있는지 확인하세요
  • 리전이 아시아 태평양 (서울) ap-northeast-2로 설정되어 있는지 확인하세요
  • ShopEasy EC2 인스턴스가 실행 중(Running)인지 확인하세요
실습: SSH 없이 안전하게 ShopEasy 서버 접속하기
예상 소요 시간: 약 15~20분

SSM Agent 확인, IAM 권한 추가, Session Manager 접속, SSH 포트 닫기까지 진행합니다. 추가 비용은 발생하지 않습니다.

  1. SSM Agent 상태 확인

    Amazon Linux 2023에는 SSM Agent가 기본으로 설치되어 있습니다. 먼저 EC2에 SSH로 접속하여 SSM Agent가 정상적으로 실행 중인지 확인합니다.

    확인 사항

    • EC2에 SSH로 접속하여 SSM Agent 서비스 상태 확인
    • AWS 콘솔에서 Systems Manager → Fleet Manager(플릿 관리자)에 인스턴스가 표시되는지 확인

    Agent 상태 확인 명령어

    bash
    # EC2에 SSH 접속 후 실행
    sudo systemctl status amazon-ssm-agent
    SSM Agent + IAM 권한 = Systems Manager 등록

    SSM Agent가 실행 중이고, EC2에 적절한 IAM 권한이 있으면 Systems Manager에 자동으로 등록됩니다. Fleet Manager(플릿 관리자)의 관리형 인스턴스(Managed Instances) 목록에 ShopEasy EC2가 표시되면 정상입니다. 아직 IAM 권한을 추가하지 않았다면 표시되지 않을 수 있습니다.

    SSH로 EC2에 접속한 후 sudo systemctl status amazon-ssm-agent를 실행합니다. Active: active (running)이 표시되면 Agent가 정상 동작 중입니다.

    AWS 콘솔에서 확인하려면: 상단 검색창에 Systems Manager를 입력하고 서비스를 선택합니다. 왼쪽 메뉴에서 플릿 관리자(Fleet Manager)를 클릭하여 관리형 인스턴스 목록을 확인합니다.

  2. IAM 역할에 SSM 권한 추가

    EC2가 Systems Manager와 통신하려면 IAM 역할에 SSM 관련 권한이 필요합니다. AmazonSSMManagedInstanceCore 정책을 ShopEasy-EC2-Role에 연결합니다.

    설정 내용

    항목
    IAM 역할ShopEasy-EC2-Role
    추가할 정책AmazonSSMManagedInstanceCore
    AmazonSSMManagedInstanceCore 정책이란?

    AmazonSSMManagedInstanceCore는 AWS 관리형 정책으로, EC2가 Systems Manager와 통신하는 데 필요한 최소 권한을 포함합니다. 구체적으로 다음 3가지 서비스에 대한 권한이 포함됩니다:

    • ssm: Systems Manager API 호출 권한
    • ssmmessages: Session Manager 메시지 채널 권한
    • ec2messages: EC2 메시지 채널 권한
    정책 연결 후 대기

    정책을 연결한 후 Fleet Manager에서 인스턴스가 표시되기까지 최대 5분이 소요될 수 있습니다. 표시되지 않으면 잠시 기다린 후 페이지를 새로고침하세요.

    AWS 콘솔 → IAM → 역할(Roles) → ShopEasy-EC2-Role 검색 → 역할 클릭 → 권한 추가(Add permissions)정책 연결(Attach policies)AmazonSSMManagedInstanceCore 검색 → 체크 → 권한 추가(Add permissions) 클릭

    정책 연결 후 Systems Manager → Fleet Manager에서 ShopEasy EC2 인스턴스가 관리형 인스턴스에 나타나는지 확인합니다.

  3. Session Manager로 EC2 접속

    이제 SSH 없이 Session Manager로 EC2에 접속합니다. 웹 브라우저에서 바로 접속할 수 있으며, .pem 키 파일이 필요하지 않습니다.

    접속 방법 1: AWS 콘솔에서 접속

    • 방법 A: Systems Manager → 세션 관리자(Session Manager) → "세션 시작" → ShopEasy EC2 인스턴스 선택 → "세션 시작"
    • 방법 B: EC2 → 인스턴스 선택 → "연결(Connect)" → "Session Manager" 탭 → "연결(Connect)"

    접속 방법 2: AWS CLI에서 접속

    bash
    # Session Manager 플러그인으로 접속
    aws ssm start-session \
      --target <인스턴스-ID> \
      --region ap-northeast-2

    세션에서 테스트할 명령어

    bash
    # 현재 사용자 확인
    whoami
    # 결과: ssm-user
    
    # API 서버 정상 동작 확인
    curl http://localhost:5000/api/health
    
    # 최근 로그 확인
    cat /var/log/shopeasy/api.log | tail -5
    ssm-user로 로그인됩니다

    Session Manager로 접속하면 SSH의 ec2-user가 아닌 ssm-user로 로그인됩니다. sudo를 사용하면 root 권한으로 명령을 실행할 수 있습니다.

    웹 콘솔 접속 (가장 간편): EC2 콘솔 → Instances → ShopEasy 인스턴스 선택 → 상단의 "Connect" 버튼 클릭 → "Session Manager" 탭 선택 → "Connect" 클릭. 브라우저에 터미널이 열립니다.

    CLI 접속: CLI에서 접속하려면 로컬 PC에 Session Manager 플러그인이 설치되어 있어야 합니다. 설치 방법은 AWS 공식 문서를 참고하세요.

  4. SSH 포트(22) 닫기

    Session Manager로 정상 접속이 확인되었으므로, 이제 SSH 포트(22)를 보안 그룹에서 완전히 제거합니다. 이것만으로도 서버의 공격 표면(Attack Surface)이 크게 줄어듭니다.

    변경 내용

    규칙변경 전변경 후
    SSH (포트 22) 내 IP/32 허용 규칙 삭제
    Custom TCP (포트 5000) 0.0.0.0/0 허용 0.0.0.0/0 유지 (변경 없음)

    검증

    • SSH 접속 시도: ssh -i "ShopEasy-Key.pem" ec2-user@EC2_IP타임아웃 (차단됨!)
    • Session Manager 접속: 정상 동작! (포트와 무관하게 접속 가능)
    SSH 포트를 닫기 전에 반드시 확인하세요!

    SSH 포트를 닫기 전에 반드시 Session Manager로 접속이 되는지 먼저 확인하세요! Session Manager가 동작하지 않는 상태에서 SSH를 닫으면 서버에 접속할 수 없게 됩니다.

    만약 잘못 닫았다면, AWS 콘솔에서 보안 그룹에 SSH 규칙을 다시 추가하면 됩니다.

    현업에서의 모범 사례

    현업에서는 Session Manager가 확인되면 SSH 포트를 완전히 닫습니다. 이것만으로도 다음과 같은 보안 효과가 있습니다:

    • SSH 무차별 대입 공격(Brute Force) 원천 차단
    • .pem 키 파일 유출 위험 제거
    • 모든 서버 접속이 IAM으로 통제되고 CloudTrail에 기록
    • 보안 감사(Audit) 시 접속 기록을 쉽게 제출 가능

    EC2 → Security Groups → ShopEasy-EC2-SG 선택 → Inbound rules 탭 → Edit inbound rules → SSH(포트 22) 규칙의 Delete (삭제) 버튼 클릭 → Save rules

    API(포트 5000) 규칙은 삭제하지 마세요!

확인 사항

  • SSM Agent가 실행 중이다 (amazon-ssm-agent active)
  • ShopEasy-EC2-Role에 AmazonSSMManagedInstanceCore 정책이 연결되었다
  • Fleet Manager에서 ShopEasy EC2 인스턴스가 관리형 인스턴스로 보인다
  • Session Manager로 EC2에 접속할 수 있다
  • SSH 포트(22)가 보안 그룹에서 제거되었다
  • SSH 접속이 차단되고, Session Manager만 동작한다
이번 챕터에서 달성한 것
  • SSH의 보안 문제점(포트 개방, 키 관리, 접속 기록 부재)을 이해
  • Session Manager의 동작 원리와 장점을 학습
  • IAM 역할에 SSM 권한을 추가하고 Session Manager로 접속 성공
  • SSH 포트(22)를 완전히 닫아 공격 표면(Attack Surface)을 제거
  • 서버 접속이 IAM으로 통제되고 CloudTrail에 자동 기록되도록 전환
다음 챕터 미리보기

다음 Chapter 18에서는 Amazon Inspector를 사용하여 EC2 인스턴스의 보안 취약점(CVE)을 자동으로 스캔하고 관리합니다. SSM Agent가 설치되어 있으므로 Inspector도 바로 활용할 수 있습니다.