AWS VPC(Virtual Private Cloud) 구조

로컬 PC

   │ (SSH + pem key)

Public Subnet
EC2 (Bastion Host)

   │ (VPC 내부 통신)

Private Subnet
Database Server (EC2)

Bastion Host

외부에서 내부망에 접근하기 위한 중간 게이트웨이 서버 Private Subnet에 있는 RDS나 내부 서버는 외부 인터넷에서 직접 접근할 수 없기 때문에 Public Subnet에 있는 Bastion Host를 통해 SSH 터널링으로 접속한다.

SSH (Secure Shell)

내 컴퓨터에서 멀리 있는 서버에, 안전하게 로그인하고 통신하게 해주는 기술

  1. 원격 로그인
    • 로컬 PC에서 AWS EC2같은 서버에 접속
  2. 명령 실행
    • 접속 후 서버에서 명령어 실행
  3. 파일 전송
    • scp, sftp - 파일을 서버에 올리거나 내려받을 수 있음
  4. 터널링 / 포트 포워딩
    • 로컬에서 직접 접속하지 못하는 내부망 DB를 SSH 서버를 중간다리로 써서 접속

SSH 터널링

ssh -i mykey.pem -L 3306:rds-endpoint:3306 ec2-user@bastion-ip
-L [로컬포트]:[접속할서버]:[서버포트]

예)
localhost:3306 → bastion → RDS:3306

암호화 + 공개키 인증

  1. 통신 내용 암호화

  2. 사용자 인증

  3. 공개키(Public key)/개인키(Private key) 방식

    1. 서버에 공개키 등록

    2. 내 컴퓨터에 개인키 보관

    3. 접속할 때 서버가 키 확인

    4. 맞으면 로그인 허용

    • EC2 생성시 Key Pair를 만들고 다운로드하는 .pem 파일이 개인키

EC2 생성 시 Key Pair (.pem)

aws에서 EC2 생성 시 Key Pair를 만든다. 이때 만들어지는 구조는 SSH 공개키 인증 구조다.

Key Pair 생성
 
AWS 서버(EC2)                         내 컴퓨터
-----------                        -----------
Public Key                ←→        Private Key (.pem)
~/.ssh/authorized_keys               mykey.pem

키 생성시 AWS가 다운로드하게 해주는 mykey.pem 파일이 Private Key(개인키)

.pem = SSH 개인키 파일

직접 SSH 키 생성하기 (ssh-keygen)

  1. 웹 콘솔 접속
  2. 명령어 입력
    ssh-keygen
  1. 서버 내 파일 생성
    1. ~/.ssh/id_rsa (개인키)
    2. ~/.ssh/id_rsa.pub (공개키)
  2. public key를 ~/.ssh/authorized_keys에 넣어야 로그인 가능
    cat id_rsa.pub >> ~/.ssh/authorized_keys    
  1. 개인키 다운로드 (복사)