AWS

AWS VPC 구성 및 VPC peering연결, SSH 터널링 접속

Joon0464 2021. 6. 20. 14:36

1. 목표 네트워크 구성도

위의 구성도를 토대로 VPC를 구축할 것이다.

2. VPC 생성

VPC를 생성할 지역을 선택하고 VPC 서비스 메인화면에서 위와 같은 순서로 클릭한다.
필요한 설정 값을 입력하고 VPC 생성
위와 같이 VPC가 생성된다.

리전 VPC 이름 IPv4 CIDR 블록
서울 Ticket-VPC-Seoul 10.0.0.0/16
버지니아 Ticket-VPC-Virginia 10.1.0.0/16

위 표를 참고하여 서울 리전과 버지니아 리전에 각각 VPC를 생성한다.

3. 서브넷 생성

더보기

AWS는 서브넷 생성에 따른 비용청구가 없기 때문에 CIDR 블록을 넉넉하게 설정해서 안 좋을 이유가 없다.

특히 Private Subnet에 인프라 자원들이 배치되기 때문에 추후 확장을 고려한다면 Public Subnet 보다 Private Subnet의 CIDR 블록을 더 크게 설정하는 것이 권장된다.

이번 설정에서는 Public Subnet의 Prefix는 24 Private Subnet의 Prefix는 23으로 설정했다.

 

원하는 설정값을 입력하고 서브넷 생성

서브넷 이름 IPv4 CIDR 블록 가용 영역
Ticket-Public-Seoul-a 10.0.0.0/24 ap-northeast-2a
Ticket-Public-Seoul-c 10.0.1.0/24 ap-northeast-2c
Ticket-Private-Seoul-a 10.0.2.0/23 ap-northeast-2a
Ticket-Private-Seoul-c 10.0.4.0/23 ap-northeast-2c
Ticket-Public-Virginia-a 10.1.0.0/24 us-east-1a
Ticket-Public-Virginia-c 10.1.1.0/24 us-east-1c
Ticket-Private-Virginia-a 10.1.2.0/23 us-east-1a
Ticket-Private-Virginia-c 10.1.4.0/23 us-east-1c

위의 표를 토대로 각 VPC에 2개의 퍼블릿 서브넷과 2개의 프라이빗 서브넷을 생성한다.

퍼블릭 서브넷은 추가 설정이 필요하다. 버지니아 리전 2개의 Public Subnet과 서울 리전의 2개의 Public Subnet 모두 설정한다.
반드시 퍼블릭 IPv4 주소 자동 할당 활성화를 체크한다. 퍼블릭 서브넷에 인스턴스를 생성할 때 자동으로 공인 IP 주소를 할당해주는 옵션이다.

4. NAT 게이트웨이 생성

더보기

NAT 게이트웨이는 Private Subnet에 존재하는 자원들이 외부 네트워크와 통신하기 위해 필요하다.

NAT 게이트웨이를 통해 외부에서 Private Subent에 존재하는 자원들에 직접 접근은 불가능하다.

하지만 ELB를 통해 Private Subnet 내부 자원에 접근할 때 반드시 NAT 게이트웨이가 필요하다.

주로 Private Subnet에 존재하는 인스턴스들의 yum install 이나 update를 하기 위해 필요하다.

NAT 게이트웨이는 Public Subnet에 생성하는 것이다. (구성도 참고)

 

NAT 게이트웨이 생성을 위해 위의 순서대로 클릭한다.

 

서울 리전의 퍼블릭 서브넷과 버지니아 리전의 퍼블릭 서브넷에 각각 1개씩 NAT 게이트웨이를 생성한다.

5. 인터넷 게이트웨이 생성

더보기

인터넷 게이트웨이는 Public Subent에 존재하는 자원들이 외부와 통신하기 위한 게이트웨이다. 

일반 네트워크 환경에서 존재하는 게이트웨이 역할은 한다고 생각하면 쉽다.

인터넷 게이트웨이는 생성하고 VPC에 연결하는 방식이다. (구성도 참고)

인터넷 게이트웨이를 생성하기 위해 위의 순서대로 클릭한다.
서울 리전과 버지니아 리전에 각각 인터넷 게이트웨이를 생성한다.
생성과 동시에 [작업] - [VPC에 연결] 을 클릭한다.
인터넷 게이트웨이를 사용할 VPC를 선택하여 연결한다.

6. VPC Peering 연결

더보기

VPC Peering 연결은 멀티 리전에 존재하는 VPC간 AWS 백본망을 이용한 통신이 필요한 경우 설정한다.

서울 리전에서 피어링 연결을 생성한다. (버지니아 리전에서 반대로 실행해도 문제 사항은 없다.)
VPC 요청자는 서울 리전의 VPC ID를 선택하고 VPC ID(수락자)는 요청을 수락할 버지니아 리전의 VPC ID를 확인하여 입력한다. 입력을 완료하고 피어링 연결 생성을 클릭한다.
요청을 수락할 버지니아 리전으로 지역을 변경한 뒤 요청 수락 과정을 진행한다.
요청을 수락하면 다음과 같이 Peering 연결이 활성화된다.

7. 라우팅 테이블 생성

생성할 라우팅 테이블 명 연결할 서브넷 라우팅 경로
Ticket-PublicRT-a Ticket-Public-Seoul-a 10.0.0.0/16 - local
10.1.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - igw(인터넷 게이트웨이)
Ticket-PrivateRT-a Ticket-Private-Seoul-a 10.0.0.0/16 - local
10.1.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - nat(NAT 게이트웨이)
Ticket-PublicRT-c Ticket-Public-Seoul-c 10.0.0.0/16 - local
10.1.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - igw(인터넷 게이트웨이)
Ticket-PrivateRT-c Ticket-Private-Seoul-c 10.0.0.0/16 - local
10.1.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - nat(NAT 게이트웨이)

< 서울 리전 >

생성할 라우팅 테이블 명 연결할 서브넷 라우팅 경로
Ticket-PublicRT-a Ticket-Private-Virginia-a 10.1.0.0/16 - local
10.0.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - igw(인터넷 게이트웨이)
Ticket-PrivateRT-a Ticket-Private-Virginia-c 10.1.0.0/16 - local
10.0.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - nat(NAT 게이트웨이)
Ticket-PublicRT-c Ticket-Private-Virginia-a 10.1.0.0/16 - local
10.0.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - igw(인터넷 게이트웨이)
Ticket-PrivateRT-c Ticket-Private-Virginia-c 10.1.0.0/16 - local
10.0.0.0/16 - pcx(피어링 연결)
0.0.0.0/0 - nat(NAT 게이트웨이)

< 버지니아 리전 >

라우팅 테이블을 생성한다.
라우팅 테이블을 사용할 서브넷을 연결한다.

 

라우팅 테이블에 필요한 경로를 위의 표를 참고하여 편집하고 저장한다.

8. Bastion Host 생성

더보기

Bastion Host는 Private에 존재하는 EC2에 ssh터널링 접속하기 위해 생성한다.

즉, 관리자는 ssh를 통해 Bastion Host로 접속한 후 Bastion Host에서 ssh를 통해 Private에 존재하는 EC2에 접속할 수 있다.

 

관리자  ---->  Bastion Host  ---->  Private Subnet에 존재하는 EC2 

                                ssh                        ssh                                        

SSH 접속에 사용될 키 페어를 생성 해야한다. 각 리전별로 따로 생성한다.
ppk파일로 설정하고 이름을 지정한 뒤 키 페어를 생성한다.
Bastion Host를 생성하기 위해 인스턴스 시작을 클릭한다.
단계 1에서 Amazon Linux 2 를 선택한다.
단계 2에서 원하는 인스턴스 유형을 선택하고 다음으로 넘어간다.

 

단계 3에서 직접 생성한 VPC를 선택하고 서브넷은 반드시 Public Subnet을 지정한다.
단계 4의 스토리지 추가는 기본값으로 설정하고 넘어간뒤 단계 5의 태그 추가는 원하는 값이 있으면 넣어준다.
단계 6에서 새 보안 그룹을 생성하면서 SSH 프로토콜에 대해 원하는 IP 대상에게 허용해준다. 이번 설정에서는 모든 사용자(0.0.0.0/0)에게 SSH 프로토콜 접근을 허용하도록 설정했다. 보안상 좋지 않으므로 본인만 접근할 때에는 본인의 IP만 허용하도록 설정하는 것이 좋다.
단계 7에서 검토를 마치고 시작하기를 클릭하면 키페어 선택 창이 팝업된다. 해당 팝업창에서 미리 생성해둔 키페어를 선택한다.

9. Private Subnet의 인스턴스에 SSH 터널링 접속

Pegeant를 설치하기 위해 구글에 검색하여 다운로드 링크로 이동한다.
Putty와 Pageant를 본인의 운영체제 아키텍처에 맞게 설치한다.
Pageant를 더블클릭하여 실행시키면 작업표시줄에 다음과 같이 실행된다. 작업 표시줄에 실행중인 Pageant를 더블 클릭하여 창을 띄운다.
위 과정을 통해 키 페어를 등록하고 창을 닫아준다. 키 페어는 AWS 콘솔에서 키 페어를 생성함과 동시에 자동으로 다운로드 된다.
접속할 Bastion Host의 퍼블릭 IP 주소를 확인하고 복사한다.
설치한 Putty를 실행하고 Host Name에 Bastion Host의 IP 주소를 입력한다.
SSH 접속을 위한 필수 Putty 설정 1 : 디피 헬만 그룹의 순서를 다음과 같이 위로 올려준다.
SSH 접속을 위한 필수 Putty 설정 2 : 에이전트 포워딩을 설정해야 SSH 터널링 접속이 가능하다.
SSH 접속을 위한 필수 Putty 설정 3 : 자동 로그인 사용자를 ec2-user로 설정한다.
설정을 마친 세션을 저장하고 열기를 눌러 Bastion Host에 SSH 접속을 시도한다.
이와 같이 출력되면 접속이 잘 된것이다.
이제 SSH 터널링을 통하여 접속할 Private Subnet에 존재하는 EC2의 프라이빗 IPv4 주소를 확인하고 복사한다.
ssh [IP] 를 입력하여 ssh 접속을 시도한다.
정말 연결할 것인가에 대한 질문에 yes를 입력하면 다음과 같이 접속이 잘 되는것을 볼 수 있다.
Nat 게이트웨이를 생성했기 때문에 Private Subnet에 존재하는 EC2도 yum install 이 정상 작동된다.