DevOps

[간단실습] AWS 네트워크 설정하기 (VPC, Subnet 등)

팅리엔 2022. 8. 6. 22:47

우선 계정에 기본으로 생성된 VPC가 존재한다. 그냥 참고하면 된다.

 

 

 

1단계. VPC 만들기

  • IPv4 CIDR: 10.0.0.0/16 으로 지정 (사용가능한 IP 65,534개)
  • 테넌시: 단일 전용 하드웨어에서 VPC 인스턴스를 실행할 것인가 지정하는 설정값 (당연히 더 비쌈)

VPC를 생성하면 자동으로 라우팅테이블, NACL이 생성된다.

 

 

 

2단계. Subnet 만들기

  • 퍼블릿 서브넷
    • IPv4 CIDR: 10.0.0.0/24 으로 지정 (사용가능한 IP 251개)
    • 가용영역 a
    • 기본이 아닌 서브넷에는 IPv4 퍼블릭 주소 지정 속성이 false로 설정되어 있으므로 true로 변경해준다.
  • 프라이빗 서브넷
    • IPv4 CIDR: 10.0.0.1/24 으로 지정 (사용가능한 IP 251개)
    • 가용영역 b (데이터 손실을 위해 다른 가용영역 사용)

 

 

3단계. Internet Gateway 만들기

  • 생성하면 Detached 상태 = 어떤 VPC에도 연결되어 있지 않은 상태
  • VPC에 연결 작업 필요 

 

 

4.단계. Route Table 만들기

아직은 서브넷과 인터넷 게이트웨이가 연결된 상태가 아니다. 

 

VPC를 만들며 기본적으로 생성된 라우팅 테이블이 아래와 같이 존재한다. 

10.0.0.0/16 대상의 요청이 들어오면 VPC 내부로 요청을 전송할 뿐이다.

 

위에서 생성한 서브넷은 기본 라우팅 테이블에 연결되어 있다. 

서브넷을 public, private으로 만들기 위해서 각각에게 알맞은 라우팅 테이블을 만들어야 한다.

 

 

public, private용 라우팅 테이블 각각 만들기

public, private용 라우팅 테이블을 만든 후 서브넷 연결 편집을 통해 서브넷을 연결해준다. 

private 라우팅 테이블을 default 라우팅 테이블로 설정해주는 게 좋다. 

 

라우팅 테이블 편집하기

라우팅 테이블 순서대로 트래픽 전송이 이뤄진다.

  • public
    • 내부 요청은 내부로
      10.0.0.0/16 → local 
    • 10.0.0.0/16 이외의 요청의 경우 인터넷 게이트웨이와 연결하여 외부 인터넷으로
      0.0.0.0/0 (모든 트래픽) → 3단계에서 만든 인터넷 게이트웨이
  • private
    • 10.0.0.0/16 → local 

 

 

5단계. 보안 설정하기

NACL과 Security Group

참고) outbound 임시포트의 범위: 1024 ~ 65535

 

 

방법1. NACL 설정하기 - stateless

Stateless? outbound 룰을 철저하게 따름

 

public, private용 NACL을 각각 생성한다. 라우팅 테이블과 마찬가지로 private을 default로 한다.

만든 후 각각 public, private 서브넷에 연결해준다.

 

그리고 인바운드 규칙 & 아웃바운드 규칙을 설정해준다.

 

Public NACL

  • 인바운드 규칙
    • 포트 22(SSH), 80(HTTP), 443(HTTPS) 허용
    • 그 다음 우선순위로 모든 트래픽 Deny
    • 규칙 번호: 인바운드 확인 시 작은 것부터 먼저 확인한다.
  • 아웃바운드 규칙
    • 포트 1024-65535 허용 (response를 받는 포트는 임시포트)
    • 그 다음 우선순위로 모든 트래픽 Deny

 

방법2. Security Group 설정하기 - stateful

Stateful? 허용된 Inbound request를 기억하고 해당 Request에 대한 outbound를 허용 (outbound 룰이 엄격하지 않음)

 

 

 

6단계. Bastion Host 만들기

Bastion Host란, 인터넷 사용자가 Private subnet에 접근하기 위한 일종의 게이트웨이이다.

 

실습을 위해 public, private 서브넷을 만들고, private의 Security Group 설정에서 public ec2에서 오는 인바운드 트랙픽만 허용한다.

public ec2의 security group
private ec2의 security group - public ec2의 security group에서의 인바운드만 허용하고 있다.

 

이제 public ec2에 접속하여 private ec2에 접속해보자. public ec2에 private ec2 pem 키가 존재해야 ssh 접속이 가능하다. 

private ip만 존재하는 private ec2에 접근하려면 이 public ec2(=bastion host)를 사용하는 것.

 

 

 

7단계. NAT Gateway 만들기

private ec2에서 외부 인터넷에 연결하여 프로그램을 다운받거나 업데이트 하는 작업이 필요할 수 있다.

이를 위해 public subnet에 NAT Gateway를 만들어야 한다.

 

그리고 라우팅 테이블을 수정해야 한다. 현재 private 라우팅 테이블은 local로의 라우팅만 설정되어 있다.

local을 제외한 모든 트래픽은 만든 NAT Gateway로 연결하도록 라우팅 테이블을 수정해준다.

 

 

 

8단계. VPC EndPoint 만들기

private instance에서 S3, RDS와 같은 서비스에 접근하고자 할 때 EndPoint를 거친다.

 

NAT Gateway를 사용하면 되지 않나? 하는 의문: 그러면 트래픽이 노출되기 때문에 좋지 않다.

(NAT Gateway에서 S3에 접근하려고 한다 - 라는 사실에 대한 노출)

 

VPC EndPoint는 public subnet과의 접점 없이, private subnet 내에서 활용하는 것이다.

 

S3 접근을 위한 IAM 역할 만들기

private EC2에 위 IAM 역할 부여하기

public ec2는 IAM 역할이 필요하지 않다. public ec2 > private ec2 > s3로 접근할 것이기 때문이다.

EndPoint를 만들지 않았음에도 s3는 접근할 수 있다. 이전 단계에서 만든 NAT Gateway를 통해 접근하는 것이다.

VPC EndPoint 만들기

  • 서비스 범주: S3 (Gateway)
  • VPC
  • 라우팅 테이블 구성: private

생성 후 잠시 기다리면 private 라우팅 테이블을 확인하면 자동으로 라우팅 행이 하나 추가되어 있다.

S3와 관련한 트래픽은 모두 S3로 연결하라는 의미이다.

 

 


 

 

이상으로 기본적인 AWS 네트워크 설정을 끝마친다.