본문 바로가기

AWS/EC2

Private EC2 접속 방법 (4) - Private EC2 접속하기

안녕하세요 !!

 

오늘은 지난 3개의 포스팅인..

2021.03.29 - [AWS/EC2] - Private EC2 접속 방법 (1) - Bastion EC2 생성

 

Private EC2 접속 방법 (1) - Bastion EC2 생성

안녕하세요 ! 오늘은 클라우드에 대한 관심이 높아지고, 국비학원에서 클라우드를 다루는만큼(저도 국비학원 출신입니다.) AWS를 처음 접하시는 분들에게 Bastion Instance에서 Privete Instance로 접속하

junhyeong-jang.tistory.com

 

2021.03.29 - [AWS/EC2] - Private EC2 접속 방법 (2) - Pem 파일 변환 및 PuTTY 설정

 

Private EC2 접속 방법 (2) - Pem 파일 변환 및 PuTTY 설정

안녕하세요. 오늘은 지난 포스팅 Private EC2 접속방법(1) - Bastion EC2 생성 에 이어서, 다운로드한 pem 파일을 ppk 파일로 변환하고 PuTTY 설정을 해보도록 하겠습니다. 바로 포스팅 시작할게요. 먼저 PuTT

junhyeong-jang.tistory.com

 

2021.03.29 - [AWS/EC2] - Private EC2 접속 방법 (3) - Bastion EC2 접속하기

 

Private EC2 접속 방법 (3) - Bastion EC2 접속하기

안녕하세요!! 오늘은 저번 포스팅인.. 2021.03.29 - [AWS/EC2] - Private EC2 접속 방법 (1) - Bastion EC2 생성 Private EC2 접속 방법 (1) - Bastion EC2 생성 안녕하세요 ! 오늘은 클라우드에 대한 관심이 높아..

junhyeong-jang.tistory.com

 

에 이어서 Bastion Instance를 통해서 Private Instance로 접속하는 방법을 포스팅하고자 합니다.

Private Instance가 Linux 계열이라면 간단하게 SSH 명령어로 접속할 수 있지만,

Private Instance가 Windows라면 터널링을 통해서 접근해야합니다.

 

위 2가지 케이스를 모두 알아보도록 하겠습니다.


먼저 Private Instance가 Linux 계열인 경우 입니다.

 

Private Instance를 생성하는 과정은 생략했습니다. Bastion EC2 생성 포스팅을 참고하셔서 생성해주시면 됩니다.

저는 Private Instance를 생성할 때, 저번 포스팅에서 말씀드린 것처럼 '서버/관리자당 Key 각각 할당'이 FM이기 때문에,

Bastion EC2와는 다른 Key pair를 선택 해주었습니다. 또한, 선택된 Key pair를 PuTTYgen을 통해서 ppk 파일로 변환하였습니다.

 

서로 다른 Key pair

 

Private Instance는 당연하게도 Public IP가 없고, Subnet에 연결된 Routing table에 IGW로 향하는 규칙이 없습니다.

그저 local(VPC 대역) 끼리만 통신가능한 상태죠.

이러한 Private Instance로 접속하려면 간단합니다!! 통신이 되는 Local 대역의 서버에서 접속하면 됩니다!

즉, Remote Session을 요청하는 Client가 내 Desktop이 아닌, 동일 VPC내에 있는 Server가 되도록 하는것이지요.


그럼, 먼저 Private Instance에 쓰인 Key pair가 Bastion Instance에 위치해야하기 때문에 Private Key 정보를 가지고

Bastion Instance에 만들어주도록 하겠습니다.

(WinSCP 등과 같은 SFTP 툴을 사용하셔서 날려주셔도 됩니다!)

 

우리가 Instance를 생성하면서 pem 파일을 받고, 그 파일을 메모장으로 열게되면 아래와 같은 정보들이 보이실겁니다.

 

pem 파일 내부의 정보

 

이 정보를 그대로 복사하셔서 Bastion Instance에서 접속하여 파일을 하나 만들어주고, 허가권을 600으로 수정하겠습니다.

(접속방법은 이전 포스팅인 Bastion EC2에 접속하기 를 참고해주세요.)

 

[junhyeong@ip-Bastion-50 ~]$ touch PrivateEC2Key
[junhyeong@ip-Bastion-50 ~]$ echo "PRIVATE_KEY_INFO" > PrivateEC2Key

or

[junhyeong@ip-Bastion-50 ~]$ touch PrivateEC2Key
[junhyeong@ip-Bastion-50 ~]$ vi PrivateEC2Key

붙여넣기

[junhyeong@ip-Bastion-50 ~]$ sudo chmod 600 PrivateEC2Key

 

Private EC2의 Key 파일

그럼 이 파일을 가지고 Private Instance에 접속해보도록 하겠습니다.

그 전에! Private Instance에 할당된 SG Inbound rule에 Bastion IP를 허용하도록 해야하고,

Private Instance의 Private DNS(or Private IP)를 알아야합니다.


먼저 EC2 Console에서 Private Instance에 연결된 SG에 Bastion의 IP(or SG_ID)를 넣어 Bastion에서 오는 22번 통신을

허용해주도록 합시다.

 

사담이지만, SG_ID를 넣는다는 것은 'SG를 참조하도록 한다.' 라고 많이들 표현하시고,

이러한 의미는 'SG_ID가 할당된 ENI에서 오는 XX Port를 허용한다' 라고 이해하셔야 합니다.

SG_ID를 참조한다고 해서 그 SG_ID에 적용된 모든 rule들을 허용한다는 의미가 절대 아닙니다.

 

여튼.. 저희는 Bastion의 IP를 지정하여 등록해주도록 하겠습니다.

 

Private Instance에 할당된 SG

 

또한, Private Instance의 Private DNS를 확인하고 복사하도록 합니다.

 

Private Instance의 Private DNS 확인 및 복사


자 다시 PuTTY 터미널로 돌아와서 가지고 있는 Key를 사용해서 Private Instance에 ec2-user로 접속하도록 하겠습니다.

 

[junhyeong@Bastion_IP-50 ~]$ ssh -l PrivateEC2Key ec2-user@PRIVATE_DNS

The authenticity of host 'PRIVATE_IP-100.ap-northeast-2.compute.internal (PRIVATE_IP.100)' can't be established.
ECDSA key fingerprint is SHA256:Create by JunHyeong blahblah.
ECDSA key fingerprint is MD5:Create:by:JunHyeong:blahblah.
Are you sure you want to continue connecting (yes/no)? yes

 

그럼 아래와 같이 접속이 되신 것을 확인하실 수 있습니다.

 

Private Instance로 SSH 접속.


다음은 PuTTY 자체에서 터널링을 설정하는 방법입니다.

 

Private Instance의 OS가 위처럼 Linux라면 간단하게 ssh를 이용하여 접속하면 되지만,

Private Instance의 OS가 Windows라면(RDP) 이는 터널링(or xrdp 등...)을 사용해야 합니다.

 

터널링을 사용한 Linux 접속, 터널링을 사용한 Windows 접속 순서로 쓰겠습니다.

 

PuTTY를 실행하고 저장했던 Session을 Load 한 이후에, Bastion의 Public DNS를 입력해줍니다.

 

Bastion Session Load 후 Public DNS 입력

 

그리고, SSH - Auth로 가서 Bastion의 ppk파일을 불러옵니다.

 

Bastion ppk 불러오기

 

다음은 SSH - Auth - Tunnels로 이동하여, Source port에 Dynamic ports 라고 불리우는 49152 ~ 65535 범위를

입력하고, Destination 에는 PRIVATE_DNS:22 를 입력 후 Add 버튼을 눌러줍니다.

 

터널링 구성

 

그리고 다시 Session으로 돌아가서 Open 버튼을 눌러 터미널을 열어줍니다.

 

설정 완료 후 Open

 

그러면 당연하게도 터미널 연결이 될텐데요. 해당 터미널 창을 종료하지 마시고!! 새로운 PuTTY를 열어줍시다.

그리고, 역시 저장했던 Session을 불러오시고, 이번에는 Host Name 부분에 localhost,

Port 부분에 SOURCE_PORT 를 입력해줍시다. SOURCE_PORT 는 위에서 터널 구성을 할 때 입력했던 Port 입니다.

 

그리고, SSH - Auth 로 이동해서 Private Instance의 ppk파일을 불러온 후, 다시 Session으로 돌아가 Open을 눌러줍니다.

 

Session 불러오기 - Host Name 입력 - Auth에서 Private EC2 ppk 불러오기 - Session에서 Open

 

그러면 아래와 같이 Private Instance에 접속된 것 확인할 수 있습니다.

 

PuTTY 터널링을 통한 Private Instance 접속

 

 

우리가 위에서 한 설정은

 

1. Local Host의 XXXXX Port를 Private_Instance의 22번 Port와 연결해준 것이고,

2. 이러한 연결의 통로역할을 해주는 녀석을 Bastion Instance로 지정하고

3. 터미널을 열어놓음으로써 통로를 열어놨다.

 

라고 생각하시면 이해가 편하실겁니다.


위에 사진은 Private Instance가 Linux인 경우 접속한 화면인데요.

 

터널링 구성을 아래와 같이 하여 mstsc(원격 데스크톱 연결)를 사용하여 Windows 서버에 접속하겠습니다.

물론!! Private Windows Instance ENI에 할당된 SG에서 Inbound rule 3389 Port를 Bastion의 IP(or SG_ID)로

열어주셔야겠죠?!!

마찬가지로 PRIVATE_DNS 부분은 Private Instance의 Private DNS주소를 입력해주세요.

 

RDP Port인 3389로 터널링

 

이 후 Windows Key + R 을 눌러 실행창을 열고, mstsc를 입력합니다.

 

원격 데스크톱 연결

 

그리고 localhost:SOURCE_PORT 를 입력해주시면 됩니다.

저는 위에서 50010 Port를 사용했으므로 50010 Port로 입력했습니다.

 

Private Windows Instance 접속.

 

정상적으로 통신이 이루어졌다면 자격증명을 입력해야하는데요.

Linux는 pem 파일을 ppk로 변환해서 ppk 파일로 접속했다면, Windows는 받은 pem 파일을 Decrypt 해야합니다.

 

AWS EC2 Console로 이동하여 Windows Instance를 선택하고 Action - Get Windows Password를 누르시면,

아래와 같이 Key Pair Path에서 파일을 불러오게 되어 있습니다.

 

파일을 불러온 후 Decrypt Password를 하면 Password가 나오게 되고 해당 Password로 자격증명을 입력하시면 됩니다.

 

여담이지만, Linux의 root 계정과 마찬가지로 Administrator 계정은 보안에 취약하기에 다른 Admin 계정을 추가하길

권고드립니다.

 

 

pem 파일 Decrypt

 

접속이 완료 된 모습입니다.

 

쨔라쟌!


위처럼 PuTTY에서 지원하는 터널링을 사용하는 방법도 있고, Bastion Instance 안에서 SSH 명령어를 사용하여

터널링 구성이 가능하지만, 저는 PuTTY를 이용한 방법만 소개해드리겠습니다 ^^

 

 

그럼 이만 포스팅 마치겠습니다!!

 

 

감사합니다. (__)