몰땐ENOUGH
AWS : VPC(Virtual Private Cloud) 스터디 본문
VPC 개념을 이해하기 위해 , aws 가이드를 일단 읽어보자..
With Amazon Virtual Private Cloud (Amazon VPC), you can launch AWS resources in a logically isolated virtual network that you've defined. This virtual network closely resembles a traditional network that you'd operate in your own data center, with the benefits of using the scalable infrastructure of AWS.
읽어보니., 완전히 고립된 나만의 가상 네트워크 환경을 클라우드에 띄울 수 있다는 뜻 같다.. 즉 인터넷과 연결되기 전에, 소통할 수 있는 내부망을 하나 만들 수 있다는 뜻 같다.
The following diagram shows an example VPC. The VPC has one subnet in each of the Availability Zones in the Region, EC2 instances in each subnet, and an internet gateway to allow communication between the resources in your VPC and the internet.
설명 예제와 그림을 보면서, AWS가 사용하는 용어들도 하나씩 정리하면서, VPC의 개념을 좀 더 익혀보자. 그리고, 그림 상황 이외에도 더 개념을 확장해서 생각해보자.
1. The VPC has one subnet in each of the Availability Zones in the Region
🧐 region / availability zone
AWS에 말하는 region, availability zone은 아마존 회사에서 나눈 그냥 지리적 단위다.
예를 들어, 서울 Region(ap-northeast-2) / 서울 Region의 가용 영역 ap-northeast-2a와 ap-northeast-2b 이렇게 말이다.
위의 그림에서 region/availability zone을 해석해보면, 아래 같은 느낌이랄까?
같은 지역내에 availability zone 여러개 두는 이유는 하나의 availability zone에 문제가 생기더라도 다른 availability zone 에서 서비스를 지속적으로 제공할 수 있도록 하기 위해서다. 즉 사용 중이던 마곡 데이터 센터가 불이나도, 강남에서 바로 작업을 이어받아 진행할 수 있다는거다.
🧐 subnet
서브넷은 VPC(Virtual Private Cloud) 내에서 IP 주소 범위를 나누어 네트워크를 세분화한 작은 네트워크 단위라고한다..
- 10.0.0.0/16: 10.0.0.0부터 10.0.255.255까지, 총 65,536개의 IP 주소를 포함하는 네트워크.
- 10.0.1.0/24: 10.0.1.0부터 10.0.1.255까지, 총 256개의 IP 주소를 포함하는 서브넷.
참고로, IP 주소는 32비트로 이루어져 있고, 이 32비트는 4개의 옥텟(octet)으로 나누어짐.
" . " 을 기준으로 2^8 (8비트) 라고 생각하면 된다. "/ "뒤의 숫자는 서브넷 마스크로 네트워크 주소가 몇 비트로 고정되어 있는지 나타내는데..
16이면 16비트로 고정된거고, "."을 기준으로 8비트씩 가져간다고 했으니, 10.0.0.0/16 경우 10.0.0.0/16 bold로 표시한 부분이 호스트 부분이다. 네트워크 기록은 aws를 마치면 따로 작성해볼 예정이다..
이제 그럼 개념을 가지고 그림을 보자.
요렇게, AZ( availability zone ) 에 따라 subnet이 나누어진다. (AZ를 서로 서로 침범해서 사용하는 subnet 은 없다.)
VPC1 : 10.0.0.0/16
서브넷 1: 10.0.1.0/24서브넷 2: 10.0.2.0/24
서브넷 3: 10.0.3.0/24
VPC2 : 10.1.0.0/16
서브넷 5: 10.1.1.0/24서브넷 6: 10.1.2.0/24
서브넷 7: 10.1.3.0/24
이렇게 할당 받는거다.
이렇게 서브넷을 나누는 이유는 Public Subnet (공개 서브넷 eg 웹 서버, API 서버 등 외부 접근이 필요한 리소스) , Private Subnet (비공개 서브넷 eg 데이터베이스 서버, 내부 서비스 등 보안이 중요한 리소스 ) 등으로 나누어서
같은 VPC 내에서도 접근제어를 다르게 하기 위해서다.
2. EC2 instances in each subnet, and an internet gateway to allow communication between the resources in your VPC and the internet.
ec2 인스턴스들은 각각 서브넷에 있고, 인터넷 게이트웨이를 통해 vpc 내에서 리소스(데이터)를 주고 받을 수 있음, 그리고 인터넷과도 데이터 주고받을 수 있음
VPC 내에서 여러 서브넷을 만들 수 있고, 각 서브넷은 특정 AZ에 속하게 된다. 그리고 해당 서브넷 내에는 여러개의 EC2 인스턴스들을 넣을 수 있음 ! 위의 예는 EC2 (AWS에서 제공하는 가상 서버 ) 라고 설명하고 있지만, EC2 이외에도 RDS, ElastiCache, Load Balancer, Lambda 등이 인스턴스로 들어갈 수 있다고 한다.
🧐 인터넷 게이트웨이(IGW)
VPC와 외부 인터넷 간의 통신을 가능하게 해주는 리소스다.
인터넷과의 연결은 인터넷 게이트웨이를 통해 이루어지고,
인스턴스가 인터넷과 통신하려면 공개 서브넷에 있어야 하고, 해당 서브넷의 라우팅 테이블에 인터넷 게이트웨이로 가는 경로가 설정되어 있어야 된다.
서브넷 A와 서브넷 B가 서로 다른 AZ에 있어도, 트래픽은 같은 VPC 내에서 라우팅되기 때문에 인터넷 게이트웨이(IGW)나 NAT 게이트웨이를 거치지 않고 VPC 내에서 직접 처리된다고 한당.
다만, 그럼 같은 VPC 내부라면 public 과 private 서브넷은 서로 소통이 가능할까?
답은 그렇다.
근데, 만약 보안 때문에 그러면 안된다면?
보안그룹, 네트워크 ACL 을 설정해서, 막으면 된다.
그럼 마지막으로,, Private subnet의 인스턴스가 인터넷 통신을 하려면??
public subnet에 배치된 NAT Gateway를 통해 외부 인터넷과 연결하면 된다고 한다..