[AWS 시리즈] 배스천 호스트 구성 실습 + NAT - Private Subnet, Public Subnet, bastion host (2)

Jaewoong2·2024년 8월 4일
1

aws

목록 보기
6/10
post-thumbnail

이번 실습은 비용이 청구 될 수 있습니다. 많은 비용 청구가 부담스러우신 분들은 먼저 글을 한번 다 읽고 실습한 후에 리소스를 삭제 하도록 합시다. (삭제하더라도 조금의 비용은 나올 수 있음)

배스천 호스트란?

❓베스천 호스트란❓
여기서 사용할 베스천호스트 (Bastion Host) 란
Public Subnet 내에 있으며, Private Subnet과의 통신을 위한 서버 입니다.

외부 네트워크에서 보안프로그램이 설치된 내부 네트워크에 접속할 수 있게 도와주는 것이 베스천 호스트 입니다.

여기서 실습 해볼 내용은 외부에서 접속할 수 없는 Private Subnet (보안 그룹 및 라우팅 테이블로 외부 인터넷과의 접점이 없는 서브넷) 에 접속 할 수 있는 Public Subnet에 있는 서버를 만들어 Bastion Host 를 구성하는 것 입니다.

여기서 VPC 설정을 하지 않으셨거나 VPC 및 Subnet 에 대해 잘 모르시는 분은 이전글을 확인 해주세요 :)

https://velog.io/@jwisgenius/AWS-시리즈-VPC-생성-및-구성-하기-Private-Subnet-Public-Subnet-bastion-host-1

생성 할 AWS 리소스

  1. SSH 접속 툴
    • putty (window)
    • ssh (linux / mac)
  2. Private Subnet, Public Subnet 각 1개
  3. EC2 Instance (t2.micro - 프리티어) 2개
  4. NAT 1개
    • Private Subnet 에서 인터넷으로 트래픽이 갈 수 있도록 설정

❗️ 여기서 생성할 EC2 Instance 와 NAT는 시간당 비용이 청구 되기 때문에, 실습 후에 바로 삭제하시는게 좋습니다 :)

실습

EC2 생성

AWS 콘솔 접속 후, EC2 검색

EC2 대시보드에서 인스턴스 시작

AWS 콘솔에 접속하여, EC2를 검색하고 대시보드에 들어오게되면, 인스턴스 시작 버튼이 있습니다. 이 버튼을 클릭하면 EC2 인스턴스를 생성 할 수 있습니다.

Public Subnet EC2 Instance 생성

Instance 생성

먼저, 퍼블릭 서브넷에 위치할 EC2 Instance를 생성 하겠습니다. 먼저, 많은 오픈소스들이 깔려 있는 Amazon Linux를 설치 하고 인스턴스 스펙은 t2.micro 로 프리티어 의 인스턴스를 생성 하겠습니다.

키페어 생성

인스턴스 접속시 키페어를 이용해 접속하기 위해서, 키페어를 생성 하도록 하겠습니다.

네트워크 설정

네트워크 설정에서, 편집을 클릭하면 아래와 같이 구체적으로 네트워크를 설정 할 수 있습니다.

네트워크 설정시, 외부에서 접근이 가능 하도록 Public IP 할당을 받도록 합시다. 서브넷은 퍼블릭 서브넷으로 설정 하도록 하겠습니다. 또한 보안그룹을 새로 생성하도록 하며 내 현재 IP만 인스턴스에 22번 포트로 접속 할 수 있도록 설정 합니다.

❓보안 그룹이란❓

  • 보안 그룹을 사용하여 AWS 리소스로 들어오거나(Inbound) 나가는(Outbound) 트래픽들을 직접 설정하여 허용할 수 있다. (Deny는 불가능)
  • 여기서, 내 IP 가 EC2 Instance 로 22번 포트를 이용해 들오어는 트래픽을 허용 해주었다.

이렇게 설정 한 후, Instance를 생성 하도록 합시다.

중간점검

ap-northeast-2c 가용영역 에있는 Public Subnet 안에 EC2 Instance를 생성 하였습니다. 생성 된 EC2 Instance는 (내 IP 에서 들어오는 트래픽을 허용하는 정책을 가진) 보안그룹에 의해 트래픽 제어를 받고 있습니다.

EC2 Instance 접속 및 확인

인스턴스 가 생성되었으면, 인스턴스 대시보드에 들어가서, 연결 버튼을 클릭 합니다.

그러면 위와 같이, SSH 클라이언트로 접속하는 방법을 확인하고, 인스턴스에 연결 해줍니다.

chmod 400 을 하는 이유는, 개인키의 경우 권한이 너무 크면 권한이 크다고 거절되기 때문에, 권한을 축소 후 사용 해야 하기 때문입니다.

인스턴스에 연결 해주기 위해 터미널 창을 열어서 인스턴스에 연결 해보도록 합시다.

터미널에서 다운로드 받은 키페어가 있는 위치로 이동한 후, 작성된 인스턴스에 연결 하면 위와 같이 화면이 나올 것 입니다.

그리고, 제대로 연결되었는지 확인 하기 위해 구글에 curl 요청을 보내봅시다.

  • Public Subnet에 연결된 라우팅 테이블에 외부 인터넷 으로의 트래픽 요청은 IGW 로 가도록 설정되어 있기 때문에, 구글로의 요청이 가능 합니다.

다음은, Private Subnet에 EC2 인스턴스를 생성 해봅시다.

Private Subnet EC2 Instance 생성

먼저, Private 서브넷에 위치할 EC2 Instance를 생성 하겠습니다. 나머지 스펙은 앞서 만들었던 퍼블릭 서브넷에 생성한 것과 동일하게 만듭니다.

네트워크 편집시, 외부에서 접근하지 못하도록 퍼블릭 IP 할당은 비활성화로 합니다. Private 서브넷에 존재 하도록 하고 또한, 원본 (Source) 의 값을 Public Subnet의 IP 대역 (10.0.4.0/24) 로 설정 해줍니다.

이렇게 설정하고 생성하도록 합시다.

중간점검

보안그룹으로 인해 Public Subnet에서 Private Subnet으로의 통신은 허용이 되어 있습니다.

따라서, Public Subnet에 있는 EC2는 Private Subnet에 있는 EC2로의 접속이 가능 합니다.

Public EC2 에서 Private EC2 로 접속 하기

키페어를 Public EC2에 저장하기

# Local PC에서 EC2 서버로 키페어 복사 후 

$ scp -i public-ec2-keypair.pem ./private-ec2-keypair.pem ec2-user@<public-ec2의 퍼블릭 IPv4 주소>:/home/ec2-user

$ chmod 400 public-ec2-keypair.pem

위와 같은 명령어로 로컬PC에 있는 키페어를 EC2 서버로 복사 해줍니다.
그 후, 권한을 축소 해줍니다.

Instance 정보에 작성되어 있는 프라이빗 IPv4 주소 를 이용하여 SSH 접속 합니다.

Private EC2 접속 및 Google 요청 하기

위와 같은 이미지가 나오면 접속 성공 입니다.

프라이빗 서브넷에 존재하는 EC2 에서 구글에 요청을 하면 위와 접속 할 수 없다는 메시지가 나옵니다.

이는, Private Subnet은 외부 인터넷에 요청할 수 있는 수단 (NAT)이 없기 때문에 외부에 요청을 할 수 없게 됩니다.

NAT 생성하기

VPC 대시보드로 들어가서, NAT 게이트웨이 탭으로 들어갑니다.

NAT 게이트웨이를 Public Subnet에 위치하도록 하고, 외부 인터넷에 연결 요청을 할 것 이기 때문에 탄력적 IP 할당을 받고 연결 유형을 퍼블릭으로 설정 합니다.

Private 에서 인터넷으로 요청을 보낼때 NAT 게이트웨이를 통해 나가게 되면
NAT 게이트 웨이는 Private IP를 할당 받은 Public IP로 IP를 변환하여 요청을 보냅니다. (외부 통신을 위함)

Route Table에 NAT 설정 하기

Private Subnet에 연결된 Route Table 에서 외부로 나갈때 NAT 을 통해 나가도록 라우팅 테이블을 설정 해줍니다.

  • < Private Subnet 과 연결된 Route Table 변경>

외부 통신 확인 하기

다시, 프라이빗 EC2 서버에서 Google로의 요청을 보내게 되면, 통신이 거절되지 않고 통신 되는 것을 확인 할 수 있습니다.

이는, Private Subnet 에서 외부통신을 할때, NAT Gateway를 통하도록 설정되어 있기 때문에

Public Subnet에 있는 Nat Gateway를 타고, 외부로의 통신을 가능하게 되어 구글로의 통신이 가능 한 것 입니다.

AWS 리소스 삭제

  • 각각 생성한 EC2 인스턴스를 삭제 해줍니다. (미삭제 - 과금)
  • 생성한 NAT Gateway 를 삭제 해줍니다 (미삭제 - 과금)
  • 할당받은 탄력적 IP 를 삭제 해줍니다. (미삭제 - 과금)
  • 또한, 생성한 VPC를 삭제해서 실습한 서브넷, 라우팅 테이블, IGW 모두 삭제 하도록 합시다.


결론

Public 서브넷, Private 서브넷에 각각 EC2 서버를 만들고, Private Subnet에 접근 할 수 있도록 배스천 호스트를 구성 하였습니다.

또한, NAT Gateway를 통해서 Private Subnet에서 외부 인터넷으로의 통신을 할 수 있도록 구성 하는 것 또한 해보았습니다.

profile
DFF (Development For Fun)

0개의 댓글