DevOps/AWS

[AWS] VPC(가상 네트워크)와 VPC의 구성 요소들 (NACL/SG, Route Table, VPC endpoint, IAG, EC2, NAT Gateway, Bastion Host)

세리둥절 2023. 3. 29. 00:14
반응형
VPC :  간단하게 얘기하면 가상 네트워크

업체 불러서 선깔고 공유기 설치해야하는데, 가상 네트워크를 만드는 것이다. 기존 네트워크와 개념적으로 매우 유사하다.

 

- 계정을 생성하면 default로 VPC를 만들어준다.
- 다양한 서비스들을 VPC 위에서 활용할 수 있다.
- 서브넷은 네트워크를 분할하는 것인데 VPC에서도 네트워크를 분할할 수 있다. 
- VPC는 하나의 리전에만 있을 수 있고 다른 리전으로 확장은 불가능하다
- 서브넷은 하나의 Availability Zone 안에만 있을 수 있고 다른 AZ로 확장 불가능하다.

 

VPC의 구성 요소

IGW : 인터넷과 브이피씨 내부 구성요소와 소통하는 매개체이다. 
NACL / SG : 서브넷의 보안을 담당하는 아이들
Route Table : 브이피씨 내부 구성요소, 혹은 외부와의 소통을 위해 필요한 테이블

 

 

 

Internet Gateway (IGW)

private subnet은 외부 인터넷과 소통하지 않는 서브넷이기 때문에 IGW와 연결되어 있지 않다.

 

Route Table

10.0.0.0/16 여기로 요청이 들어오면 local (VPC내부)로 들어가라.
0.0.0.0/0 나머지로 요청이 들어오면 인터넷 (VPC외부)로 들어가라.

 

 

 

NACL

NACL : stateless
SG : stateful / VPC 서브넷의 설정값이라고 이해하면 더 좋다
Access Block은 NACL에서만 가능하다

 

 

NAT Gateway

NAT : Network Address Translation
왜 필요할까? 
private subnet은 route table에서 IGW로 쏘는 소통이 없다. (외부와 소통을 안하기 때문에) Route Table에서 막힌다.
주로 Private Subnet에는 어떤 서비스들을 넣을까? 격리된 서브넷에는 고객 DB같은  데이터베이스 등을 넣어둔다.
그런데 mysql을 다운받기 위해서 대신 다운받아주는 대리인이 필요하다.
public 서브넷 안에 있는 NAT Gateway 혹은 NAT instance를 통해서 우회하는 것이다.

NAT instance는 그냥 EC2 서버라고 생각하면 된다. Public 서브넷 내에 있는 EC2 서버를 활용한다라고 생각하면 됨.
NAT gateway는 AWS에서 제공하는 하나의 특화된 서비스를 만들어놓은 것이다. 

 

 

Bastion Host

인터넷(외부)에 관리자인 내가 있는데, Private Subnet 안에 있는 다양한 instance를 조작하고 싶다.
따라서 이 사람이 private 서브넷에 접속 Access를 해야하는데 방법이 없다. 

Bastion Host는 퍼블릭 서브넷에서 대리인 역할을 해주는 것이다. Bastion Host도 EC2이다.
내가 하고 싶은 조작을 퍼블릭 서브넷을 통해서 하는 것이다. 
나는 콘솔을 통해서 퍼블릭 서브넷에 Bastion Host를 조작하고 걔가 SSH를 때려서 프라이빗 서브넷을 조작한다

 

 

VPC Endpoint

어떤 서비스에 비공개로 연결하고 싶을 때 VPC endpoint를 사용한다.
AWS의 여러 서비스들과 VPC를 연결시켜주는 중간 매개체
Private subnet은 격리된 공간인데, AWS의 서비스를 이용하려면 결국에는 인터넷으로 나가서 AWS에 연결을 해야하는 것이다.
퍼블릭 IP 주소를 필요하지 않더라도 서비스에 비공개로 연결이 되는 것이다.

 

 

Gateway Endpoint

Gateway Endpoint는 Route Table에서 Gateway Endpoint로 쏴주는 것이다

 

 

실습

<브이피씨 만들기>
1. VPC를 클릭한다 > VPC 생성
2. CIDR : 10.1.1.0/26
3. VPC 메뉴 안에서 왼쪽 서브넷을 클릭해서 서브넷 생성 (6개)
4. my-public-subnet-a 방금만든 VPC를 클릭해서 만드는데 CIDR: 10.1.1.0/26 
5. my-public-subnet-c 서브넷 추가 CIDR: 10.1.1.64/26 
6. my-private-subnet-app-a 서브넷 추가 CIDR: 10.1.1.128/27 
7. my-private-subnet-app-c 서브넷 추가 CIDR: 10.1.1.160/27 
8. my-private-subnet-db-a 서브넷 추가 CIDR: 10.1.1.192/27 
8. my-private-subnet-db-c 서브넷 추가 CIDR: 10.1.1.224/27 
<인터넷 게이트웨이 생성>
1. 왼쪽 인터넷 게이트웨이 생성 (이름 my-igw)
2. 오른쪽에 있는 VPC 연결을 한다.

<라우팅테이블 생성>
1. my-public-route 라우팅테이블 생성 (vpc: my-vpc 선택)
2. my-private-route 라우팅테이블 생성 (vpc: my-vpc 선택)


1. 왼쪽에 VPC 필터링에서 my-vpc 선택해서
2. my public-route 선택하고 > 라우팅 탭 > 라우팅 편집
3. 0.0.0.0/0 > 대상: 인터넷게이트웨이 > my-igw 선택 > 저장
4. my-private-route는 NAT Gateway를 선택하겠다
5. 왼쪽에 NAT gateway 선택 > 생성
6. 이름 : my-natgateway / 서브넷 : my-public-subnet-a / 연결유형 : 퍼블릭 / 탄력적 IP 할당 > 생성
7. 라우팅 테이블로 돌아가서 my-private-route 선택 > 라우팅 탭 > 라우팅 편집
8. 0.0.0.0/0 > 대상: 나트 게이트웨이 > my-natgateway 선택 > 저장


< 라우팅테이블에 서브넷을 연결 >
1. my-public-route 선택 > 서브넷 연결 탭 > 서브넷 연결 편집
2. public-subnet-a와 c 모두 클릭해서 연결 저장 (2개)
3. my-private-route 선택 > 서브넷 연결 탭 > 서브넷 연결 편집
4. private 서브넷 4개 선택해서 연결 저장

 

 

1. Bastion Host 만들기 전에 EC2를 클릭하고 보안그룹(SG)을 먼저 생성한다.
2. my-bastion-host-sg > vpc : my-vpc
3. inbound 규칙에는 내 아이피
4. 인스턴스를 클릭해서 인스턴스를 생성
my-bastion-host / t2.micro / 키페어는 이전에 만들어둔 거 / 네트워크 : my-vpc / public-subnet-a를 선택하고 /
기존 보안그룹선택 눌러서 my-bastion-host-sg를 선택한다.
5. 왼쪽에 메뉴에서 elastic ip(탄력적 IP) 생성 > 탄력적 아이피 주소 할당 받는다
6. 우측 상단의 작업을 눌러서 탄력적 아이피 주소 연결 > 인스턴스 my-bastion-host  > 연결
7. 인스턴스에 퍼블릭 ipv4 주소가 잘 할당이 된다.

 

반응형