반응형

Bastion host

Bastion이란 원래 적의 침입을 막기 위해 쌓은 시설물로 주로 성의 외부에 쌓는 성곽 등을 뜻합니다.

AWS와 같은 Cloud 환경에서 실제 운용 중인 애플리케이션을 외부의 임의 접근으로 부터 지키기 위해, 외부와 차단된 Private subnet에 위치 시키게 됩니다.

이 경우 실제 애플리케이션의 개발자도 접근할 수 없는 문제가 생기는데,
이 때 개발자가 애플리케이션에 접근하여 작업할 수 있도록 Public subnet에 Bastion host를 위치 시키고
이 Bastion host를 통해 Private subnet의 애플리케이션으로 접근하는 것이 가능합니다.

Bastion host를 통해 애플리케이션 뿐 아니라 DB 등 보안 상 Private subnet에 위치하는 다른 자원들에 대해서도 접근/통제가 가능합니다.

이렇게 Bastion host를 통해서만 접근하도록 허용하면
외부의 인가되지 않은 직접적인 접근을 차단할 수 있고,
Bastion host 역시 인가된 사용자만 접근할 수 있도록 하면
훨씬 더 높은 수준의 보안을 유지할 수 있습니다.

여기서는 Bastion host를 이용한 터널링을 통해 Private subnet 내의 자원에 접근하는 방법을 정리하였습니다.

SSH 터널링

SSH Port Forwarding(포트 포워딩)은 클라이언트(또는 점프 서버)의 특정 포트를 통해 원격 서버에 접속하는 방식이며
SSH Tunneling(터널링)이라고도 부릅니다.

터널링 방법에는 Local Forwarding(로컬 포워딩) Remote Forwarding(원격 포워딩) 2가지 방법이 있습니다.

로컬 포워딩은 클라이언트의 특정 포트 접근을 원격의 지정된 포트로 포워딩하는 방법이며,

원격 포워딩은 점프 서버의 특정 포트 접근을 원격의 지정된 포트로 포워딩하는 방법입니다.

원격 포워딩의 경우 지정하는 포트에 대한 접근을 열어줘야 하기 때문에 지정 포트가 많아지면 보안 설정도 복잡해집니다.

여기서는 로컬 포워딩을 통해 private subnet 자원에 접근하는 방법을 정리하였습니다.

SSH 터널링 시작

로컬에 있는 pem 파일을 이용하여 bastion(ec2-3-39-***-***)에 접속하고, 로컬의 9022 포트(임의 설정) 접근을 private subnet 내의 ec2 인스턴스(ip-10-0-***-***)의 22번 포트로 포워딩합니다.

로컬 포트는 사용자 임의로 설정하여 사용할 수 있습니다.

ssh -i {bastion_프라이빗_키_파일} {bastion_유저}@{bastion_호스트} \
 -L {로컬_포트}:{접속대상_호스트}:22

옵션 기능
-N 원격 명령 실행하지 않음. (터널링 용도)
-i {키_페어_파일} bastion 접속용 키 페어 파일
-L {로컬_포트}:{접속대상_호스트}:{접속대상_포트} 로컬 포트를 접속 대상의 호스트와 포트로 포워딩

SSH 접근

터널링 실행한 창을 그대로 두고, 새 창을 열어 localhost의 로컬 포트로 SSH 접근하면 대상 서버로 포워딩 됩니다.

ssh -i {접속대상_키_파일} {접속대상_유저}@localhost -p {로컬_포트}

DBMS CLI 터널링

Maria DB를 기준으로 cli를 통해 접근하는 방법입니다. (macOS 기준)

로컬에 Maria DB 설치

로컬에 Maria DB를 설치합니다.

brew install mariadb

※ Homebrew - macOS용 패키지 관리자 (https://brew.sh/index_ko)

SSH 터널링

로컬의 임의 포트로 터널링을 시작합니다.

ssh -N -i {bastion_키_파일} {bastion_계정}@{bastions_호스트} \
 -L {로컬_임의_포트}:{RDS_엔드포인트}:3306

Maria DB 접속

새 창에서 mariaDB에 접속합니다.

mysql -h localhost -P {임의_포트} -u {mariaDB_계정} -p

Redis 터널링

로컬에서 Redis 접속을 위한 Tunneling 입니다. (macOS 기준)

Redis 설치

로컬에 redis를 설치합니다.

brew install redis

SSH 터널링

Bastion을 통한 Tunneling을 시작합니다.

ssh -N -i {bastion_키_페어_파일} {bastion_계정}@{bastion_호스트} \
 -L {임의_로컬_포트}:{redis_엔드포인트}:6379

Redis 접속

redis-cli를 통해 redis에 접근합니다.

redis-cli -h localhost -p {임의_로컬_포트}

🔗 참고

https://aws.amazon.com/ko/premiumsupport/knowledge-center/systems-manager-ssh-vpc-resources/

 

AWS Systems Manager를 통해 SSH 터널을 사용하여 프라이빗 VPC 리소스에 액세스

닫기 Saud 씨의 동영상을 통해 자세히 알아보기(4:38)

aws.amazon.com

https://aws.amazon.com/ko/premiumsupport/knowledge-center/rds-connect-ec2-bastion-host/

 

EC2를 Bastion 호스트로 사용하여 프라이빗 RDS DB 인스턴스에 로컬로 연결

닫기 Karthiga 씨의 동영상을 통해 자세히 알아보기(5:53)

aws.amazon.com

 

반응형

+ Recent posts