본문 바로가기
카테고리 없음

[SSM] Bastion 서버를 이용하여 Private 자원 접근하기

by yonikim 2021. 11. 18.
728x90

 

 

AWS EC2 혹은 RDS 를 사용할 때 가장 편리한 방법은 EIP 를 부여받아 고정 IP 를 할당한 뒤, SSH 등으로 접속해서 직접 제어하는 방법이다. 하지만 이러한 방법은 보안상 취약하기 때문에 DB 와 같이 중요한 데이터가 들어가 있는 자원은 EIP 를 부여하지 않고 사용하게 되는데, 이렇게 될 경우 VPC 내부에서만 액세스가 가능하다 는 문제가 생긴다.

이를 해결하기 위해서는, 아래와 같은 방법이 있다.

  1.  AWS 에 VPN 서버를 세팅하고 VPN 에 연결해서 작업 → VPN 서버를 따로 관리해야 하는 어려움이 있다.
  2.  AWS Managed VPN Service 를 이용 → 비싸다.
  3. 🌝 AWS SSM + Bastion 서버 + SSH 터널링을 이용

 


AWS SSM


 

AWS SSM 은 VPN 을 이용하지 않고도 AWS 자원에 접근할 수 있도록 만들어주는 명령어이다. AWS EC2 인스턴스에 접속하기 위해 보안 그룹에서 22번 포트를 열어줄 필요도 없고, pem 키 파일을 공유할 필요도 없다. 또한 유저 별로 접근 권한 설정도 가능하다.

But…안타깝게도 AWS RDS 에는 ssh 터널링을 통해서만 접근이 가능하기 때문에, Bastion 서버와 pem 키 파일이 필요하다. AWS 더 열일하도록.

 


Bastion 서버 만들기


 

1. 보안 그룹 설정하기

AWS 내 자원끼리 통신하기 위해서는 여러 설정이 필요하지만, 만약 default vpc 를 사용한다면 기본적으로 내부 자원끼리 통신하도록 Route Table 이 설정되어 있다. 

이와 함께 해당 자원들이 있는 보안 그룹에서 인바운드 설정을 통해 모든 트래픽을 열어줄 수 있다. (물론 특정 프로토콜과 포트만 열어서 사용할 수도 있고, 이후 Bastion 으로 사용하는 EC2 서버를 소스로 지정해 해당 서버에만 접근 가능하도록 설정할 수도 있다.)

 

2. IAM 역할 만들기

AWS IAM > [역할 만들기] > [AWS 서비스] > [EC2] 클릭

[AmazonSSMManagedInstanceCore] 정책을 연결해 준다.

 

3. AWS EC2 생성하기

EC2 서버를 생성할 때 IAM 역할에 위에서 만든 역할로 설정해 준다.

 

 

 


AWS SSM 을 이용하여 Bastion 서버에 접속하기


 

1. AWS CLI 설치

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-mac.html#cliv2-mac-install-cmd

 

2. AWS CLI SSM Plugin 설치

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos-s


3. AWS SSM 을 이용하여 세선 시작

$ aws ssm start-session --target ${Bastion 서버 IP}

 

4. AWS System Manager > Session Manager 콘솔에 접속해 보면 연결되고 있는걸 확인할 수 있다.


AWS SSM + SSH + Bastion 서버 터널링을 통해 AWS RDS 에 접근하기


1. pem 키 권한 설정

$ sudo chmod 400 ${pem 키 파일 위치}

 

2. 터널링

1) ~/.ssh/config 작성

# ~/.ssh/config 
host i-* mi-*
  ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  User ssh-user
  IdentityFile ${pem 파일 위치}​

 

2) Command

$ ssh -L 127.0.1:3306:${RDS 엔드포인트}:3306 ${Bastion 서버 IP}

 

3) Full Command

$ ssh -i ${pem 키 파일 위치} ssh-user@${Bastion 서버 IP} -N -L 127.0.0.1:3306:${RDS 엔드포인트}:3306

 

3. MySQL 접속

$ mysql -u admin -h 127.0.0.1 -P 3306 -p ${RDS 마스터 암호}

 

728x90