AWS 기본 VPC와 기본 Subnet
AWS Region와 Availability Zone을 먼저 공부해봐야 함
포스팅
기본 VPC와 기본 Subnet
VPC : Virtual Private Cloud(가상 사설 클라우드). EC2 인스턴스가 시작되는 전체 AWS region에 걸친 논리적으로 격리 된 가상 네트워크입니다.
Subnet : EC2 인스턴스를 연결할 수 있는 VPC의 IP 주소 범위의 논리적 세그먼트이다. 보안 및 운영상의 필요에 따라 인스턴스를 그룹화하기 위해 서브넷을 생성 할 수 있다.
기본 VPC
- IPv4 CIDR 블록의 크기가 /16인 VPC를 만듭니다.
- 각 가용 영역에서 기본 서브넷을 생성합니다.
- 인터넷 게이트웨이를 생성하여 기본 VPC와 연결합니다.
- 인터넷으로 향하는 모든 IPv4 트래픽을 인터넷 게이트웨이로 전송하는 규칙을 사용하여 기본 VPC에 대한 기본 라우팅 테이블을 생성합니다.
- 기본 보안 그룹을 만들어 기본 VPC와 연결합니다.
- 네트워크 ACL(액세스 제어 목록)을 생성하여 기본 VPC와 연결합니다.
- AWS 계정에서 설정된 기본 DHCP 옵션을 기본 VPC와 연결합니다.
VPC는 주로 다음 기능을 활성화하는데 관심이 있습니다.
- 다른 계정에서 AWS 리소스 격리
- 인스턴스와의 네트워크 트래픽 라우팅
- 네트워크 침입으로부터 인스턴트 보호
EC2 인스턴스와 같은 AWS 리소스를 VPC로 실행 할 수 있는 기본 요소인 6가지 핵심 구성 요소가 있습니다.
- VPC CIDR(Classless Inter-Domain Routing) block
- Subnet
- Gateways
- Route Table
- Network Access Control Lists (ACLs)
- Security Group
CIDR block : 클래스 없는 도메인 간 라우팅. 인터넷 프로토콜 주소 할당 및 경로 집계 방법론.
2013년 12월 4일 이후에 만들어진 모든 AWS 계정은 VPC를 지원하며 이러한 계정에는 모든 region의 기본 VPC가 할당됩니다. 이러한 기본 VPC는 AWS 사용자가 EC2 인스턴스에 대한 네트워킹을 쉽게 시작할 수 있도록 설계되었습니다.
AWS Console을 살펴볼 장소는 VPC 대시보드와 함께 사용되며 VPC 대시보드의 일부로 사용 가능한 구성 요소를 전체적으로 볼 수 있습니다. 앞에서 언급한 기본 구성 요소는 모든 region의 모든 AWS 계정에 할당 된 기본 VPC의 일부로 이미 제공됩니다.
VPC로 실행 할 수 있는 기본 요소인 6가지 핵심 구성 요소
VPC CIDR Block
왼쪽 사이드 바에서 “Your VPCs”를 선택하면 대시 보드에 기본 VPC를 포함하여 특정 region의 모든 VPC가 표시됩니다. 하나의 region에는 하나의 기본 VPC만 있을 수 있습니다. 한 region에 5개의 VPC를 설치할 수 있지만 AWS가 생성하는 초기 VPC만 기본 VPC가 될 수 있습니다.
모든 VPC는 EC2 인스턴스에 사설 IP 주소를 할당하는데 사용되는 CIDR(Classless Inter-Domain Routing) 블록의 일부인 IP 주소 범위와 연결됩니다. AWS는 VPC가 RFC 1918에 정의 된 사설 영역을 사용하도록 권장합니다. 모든 기본 VPC는 주소 범위가 172.31.0.0/16 인 IPv4 CIDR 블록과 연결됩니다. 이렇게하면 65,536개의 가능한 IP 주소에서 일부 AWS 예약 주소를 뺀 값을 얻을 수 있습니다.
Subnet
그런 다음 “Subnet”화면으로 이동하면 여러 기본 Subnet이 기본 VPC에 이미 할당되어 있는 것을 볼 수 있습니다. 하나의 서브넷은 한 region의 각 AZ에 대해 하나의 서브넷입니다.
서브넷은 항상 단일 AZ와 연결되며 여러 AZ에 걸쳐있을 수 없습니다. 그러나 AZ는 여러 서브넷을 호스팅 할 수 있습니다. VPC의 각 서브넷은 해당 VPC의 /16 CIDR 블록의 하위 집합인 IPv4 CIDR 블록과 연결됩니다. 기본 VPC에서 각 기본 서브넷은 /20 CIDR 블록 주소 범위와 연결되며 4091개의 IP 주소에서 AWS가 항상 예약하는 5개의 주소를 뺀 값을 갖습니다. 2개의 서브넷은 중복되는 주소 범위를 가질 수 없습니다.
특정 서브넷을 지정하지 않고 EC2 인스턴스를 기본 VPC로 시작하면 기본 서브넷 중 하나에서 자동으로 시작됩니다. 기본 서브넷의 모든 인스턴스는 해당 서브넷과 연결된 주소 풀에서 개인 IP 주소를 받으며 개인 DNS hostname도 받습니다. 기본 서브넷에서 인스턴스는 공용 DNS hostname과 함께 AWS가 소유한 주소 풀에서 공용 IP 주소를 수신하여 인스턴스에 대한 인터넷 액세스를 용이하게 합니다.
Gateways
종종 EC2 인스턴스는 게이트웨이를 사용하여 AWS 외부에서 인터넷에나 사용자의 회사 네트워크에 연결해야합니다. 인터넷 통신의 경우 VPC를 인터넷 게이트웨이에 연결해야합니다. 인터넷 게이트웨이는 EC2 인스턴스에 대해 양방향 소스 및 대상 NAT(Network Address Translation)를 수행하는 완벽하게 관리되는 AWS 서비스입니다. 선택적으로 VPC는 가상 사설 게이트웨이를 사용하여 인스턴스의 VPC 액세스를 사용자의 회사 네트워크에 부여 할 수 있습니다.
인스턴스에 인터넷 게이트웨이에 대한 경로를 제공하는 서브넷은 공용 서브넷으로 간주됩니다. 개인 서브넷은 연결된 인터넷 게이트웨이가 있는 VPC에 있을 수 있지만 해당 게이트웨이에 대한 경로는 없습니다. 기본 VPC에서 모든 기본 서브넷은 공용 서브넷이며 기본 인터넷 게이트웨이에 대한 경로를 갖습니다.
Route Table
인터넷 게이트웨이에 대해 이야기하면서 여러번 라우팅을 언급했습니다. 모든 VPC는 암시적 라우터에 연결됩니다. 이 라우터는 사용자가 볼 수 없고 AWS에서 완벽하게 관리하고 확장 할 수 있는 라우터입니다. 가시적인 것은 서브넷과 연결된 라우팅 테이블이며 VPC 라우터가 서브넷을 나가는 아웃 바운드 네트워크 트래픽이 허용되는 경로를 결정하는데 사용됩니다.
아래의 스크린 샷에서 볼 수 있듯이 모든 경로 테이블에는 기본 로컬 경로가 포함되어있어 동일한 VPC의 인스턴스 간 통신을 원활하게 할 수 있습니다. 기본 서브넷과 연결된 주 경로 테이블의 경우 VPC용 기본 인터넷 게이트웨이를 통해 인터넷으로 라우팅 할 수도 있습니다.
또한 모든 서브넷은 경로 테이블과 연결되어야 합니다. 연결이 명시적으로 정의되지 않으면 서브넷이 암시적으로 주 라우트 테이블과 연관됩니다.
Network ACLs
네트워크 보안은 특히 기본 VPC의 모든 기본 서브넷이 공개되어 인터넷 트래픽에 개방되어있는 경우 특히 그렇습니다. AWS는 인스턴스에 대한 보안 메커니즘을 네트워크 ACL 및 보안 그룹의 형태로 제공합니다. 이 두 메커니즘은 함께 작동하여 EC2 인스턴스의 계층적 보호를 제공합니다.
네트워크 엑세스 제어 목록(ACL)은 서브넷 안팎으로의 네트워크 트래픽을 제어하는 방화벽 역할을 합니다. 특정 포트 및 특정 IP 주소 범위를 통해 특정 프로토콜에 대한 네트워크 트래픽을 허용 또는 거부하기위한 네트워크 ACL 규칙을 만듭니다. 네트워크 ACL은 상태가 없고 별도의 인바운드 및 아웃 바운드 규칙을 가집니다. 즉, 특정 네트워크 트래픽이 서브넷에 들어가고 응답이 다시 통과 할 수 있도록 인바운드 및 아웃 바운드 규칙을 만들어야합니다. 예를 들어, 서브넷에 SSH 트래픽을 허용하는 인바운드 규칙을 만드는 경우 아웃 바운드 규칙을 만들어 서브넷에서 SSH 관련 트래픽을 허용해야합니다.
각 규칙에 규칙 번호가 할당되고 가장 낮은 번호의 규칙부터 모든 규칙이 평가됩니다. 트래픽이 방화벽에 도달하면 오름차순으로 규칙과 비교하여 평가됩니다. 고려중인 트래픽과 일치하는 규칙이 평가되는 즉시 후속 규칙에 표시된 것과 상관없이 적용됩니다.
위에서 설명한 것처럼 기본 VPC의 기본 네트워크 ACL은 인바운드 및 아웃 바운드 트래픽 모두에 대해 더 낮은 번호의 규칙으로 구성되어 모든 프로토콜, 포트 및 모든 소스 또는 대상과의 양방향 통신을 명시적으로 허용합니다.
네트워크 ACL을 여러 서브넷과 연결할 수 있지만 단일 서브넷은 하나의 네트워크 ACL에만 연결할 수 있습니다. 특별히 네트워크 ACL을 서브넷과 연관시키지 않으면 서브넷이 자동으로 기본 네트워크 ACL과 연결됩니다. 기본 네트워크 ACL과 연결된 모든 서브넷이 있는 기본 VPC의 경우입니다.
Security Groups
보안 그룹은 첫 번째 방어선으로 간주되며 인스턴스 수준에서 적용되는 방화벽입니다. 즉, 보안 그룹과 명시적으로 연결된 인스턴스만 해당 규칙의 적용을 받는 반면 서브넷의 모든 인스턴스는 해당 서브넷에 적용된 네트워크 ACL의 영향을 받습니다.
네트워크 ACL과 마찬가지로 프로토콜, 포트 및 소스 또는 대상 IP를 기반으로 인바운드 및 아웃 바운드 트래픽 규칙을 작성합니다. 그러나 몇 가지 차이점이 있습니다.
- 규칙을 지정하여 네트워크 트래픽을 허용 할 수 있지만 특정 유형의 트래픽을 거부하는 규칙을 만들 수는 없습니다. 본질적으로 사용자가 명시적으로 허용하는 트래픽을 제외하고는 모든 트래픽이 거부됩니다.
- 보안 그룹은 상태 정보를 제공하므로 특정 유형의 트래픽을 허용하는 규칙을 만들면 해당 트래픽을 허용하는 명시적 아웃 바운드 규칙이 없더라도 응답 중인 아웃 바운드 트래픽도 허용됩니다.
모든 인스턴스는 보안 그룹과 연결되어야하며 시작시 보안 그룹이 지정되지 않으면 해당 인스턴스는 기본 보안 그룹과 연결됩니다.
위의 스크린 샷에서 볼 수 있듯이 기본 보안 그룹에는 동일한 기본 보안 그룹과 연결된 다른 인스턴스의 인바운드 트래픽만 허용하는 규칙이 있습니다. 다른 인바운드 트래픽은 허용되지 않습니다.
위의 아웃 바운드 규칙을 보면 모든 네트워크 트래픽이 기본 보안 그룹에 의해 허용됩니다. 여기에는 기본 VPC가 기본 인터넷 게이트웨이에 대한 경로를 가지기 때문에 인터넷 트래픽이 포함됩니다.
상상할 수 있듯이 기본 VPC는 작은 중요하지 않은 단일 계층 애플리케이션에 적합 할 수 있지만 견고한 프로덕션 환경에는 적합하지 않습니다. 그렇기 때문에 사용자가 발을 젖은 후에 사용자가 기본 VPC 구성을 수정하거나 프로덕션 용도로 커스텀 VPC를 만드는 것이 좋습니다.
Let me know what you think of this article in the comment section below!