티스토리 뷰

728x90

기본 배경

AWS는 VPC를 리전마다 5개 까지 허용하고 있다. 각 리전 마다 기본 VPC를 부여하고 있고 VPC 설정이 없으면 기본 VPC에 해당 리소스가 배치되게 된다.

 

하나의 리전은 2개 이상의 AZ(Availability Zone)으로 구성되어 있어 지역적인 이중화를 가능하게 해 준다. 하나의 AZ가 파괴되어도 다른 AZ에 위치한 서버는 여전히 서비스가 가능하다.

 

Subnet은 하나의 VPC에 내에 위치하는 하나의 네트워크 공간으로 특정 아이피 범위를 부여 받아 내부에 위치한 자원들의 통신이 가능하다. 이 subnet은 public, private으로 구분할 수 있는데 public은 인터넷을 사용해야 하는 자원들이 배치되고 각 자원은 dynamic IP가 부여되어 외부에서 접근이 가능하다. VPC 내에 위치하는 공간이지만 AZ기준으로 하나의 AZ내에 포함되어야 한다. 여러 개의 AZ에 걸쳐서 만들어 질 수 없다. 

 

일반적으로 이중화는 AZ마다 subnet을 생성하여 그 subnet에 자원들을 배치하여 하나의 AZ가 장애가 있어도 다른 AZ에서 서비스를 계속지원 할 수 있도록 구성된다.

 

많은 기업에서 서비스를 하는 백엔드 서버를 public아이피가 부여되지 않는 private subnet에 위치시켜 외부에서의 접근을 원천적으로 차단하는 구조를 사용하고 각 백엔드 서버는 NAT gateway를 통하여 고정된 outbound IP를 사용하여 타 서비스에 접근하도록 구성한다. inbound는 접근이 불가능하고 outbound는 고정 IP를 사용하는 구조라고 정리할 수 있다.

 

Private Subnet에 위치한 EC2 접근

1. 기본적으로 public IP가 없기 때문에 외부에서 접근이 원천적으로 불가능하다. 하지만 private subnet에 위치하고 있기 때문에 VPC에 있는 다른 내부 서비와는 통신이 가능하고 이 통신에 대한 제약은 IP table에서 제어가 가능하다.

2. 종종 로그를 확인하거나 서버의 상태를 확인하는 용도로 private subnet의 서버로 접근할 경우가 있다. 많은 방법이 제시되고 있지만 현실적으로 가장 간단한 방법을 적어본다. 아주 간단하다.

3. 이 방법은 ssh-agent를 이용하여 agent forwording라는 것을 사용하는 것인데, 단순하게 말하면 로컬에 있는 ssh키를 접속한 서버에서도 사용할 수 있게 해주는 기능이다.

4. ssh-agent은 하나의 데몬으로 일반적으로 리눅스의 경우 부팅 시에 실행되어 동작하고 있다. 이 agent가 사용하는 ssh key는 사용자 home의 .ssh라는 폴더에 있는 키들을 사용하게 된다. ssh-agent를 사용한 agent forwording을 사용하려면 기본적으로 .ssh 먼저 키를 등록해야 한다. 이것을 위해서 사용하는 것이 ssh-add 명령이다.

5. 등록이 하지 않고 생성하여 사용할 수도 있는데 생성하는 명령어는 ssh-keygen이다. 키 생서에 대한 부분은 아래 포스트에 좀 더 자세히 적었다.

 

 

SSH Key 사용하기

SSH는 RSA 암호화 알고리즘을 사용하는 보안 접속 프로토콜이다. 서버는 클라이언트의 공개키를 저장하고, 클라이언트는 비밀키를 가지고 있는데, 이 상황을 가지고 클라이언트가 비밀키로 진짜

kogle.tistory.com

6. 여기서 하려는 것을 정리하면

  Local  --> public EC2 --> private EC2 로 접근하려고 하고 Local에 등록된 key를 agent forwording 방식을 이용하여 전달하여 사용하는 방법이다.

7. 기본적으로 public subnet에 위치하는 서버가 없다면 이 방법을 사용할 수 없다.

8. 이제 세팅이 다 됐으면 ssh를 사용하여 서버로 접속한다.

 

실습

1. local에서 접근하는 public, private subnet의 EC2의 pem코드가 동일한 것으로 가정을 한다.

2. 이미 로컬에 pem이 있는 것을 가정한다.

3. 아래를 보면 홈의 .ssh 폴더에 ssh 인증서를 볼 수 있다. pem이 보인다.

 

 

4. 우선 ssh-agent에서 사용을 위해서 현재 agent에 등록된 인증서 목록을 출력한다.

  4-1 ssh-add -l을 사용하면 어떤 인증서가 등록되어 있는지 간단히 확인할 수 있다. 아래의 경우 2개의 인증서가 등록되어 있다.

  4-2 ssh-add -L을 사용하면 전체 public key가 표출되게 된다. 물론 public key라서 보안성 문제가 없지만 여기선 -l 사용했다.

 

  4-3 목록에 없다면 추가해 주어야 한다. 리눅스는 ssh-add 하고 뒤에 그냥 파일이름을 붙이면 된다. 해당 pem이 있는 폴더이다.

 

 

  4-3  최종 진입화면 

    4-3-1 로컬에서 bastion으로 진입을 위해서 ssh -A 옵션을 부여하였다.

    4-3-2 bastion에서 private 서버로는 ssh로 옵션 없이 진입할 수 있다. 이미 bastion에서 -A로 pem 포워딩되어 있다.

 

728x90
댓글