이번엔 AWS의 네트워크 인프라에 대한 이야기를 해보고 공부를 해보겠다.
AWS 네트워크 시스템에서 빠질수없는 항목이 당연 네트워크에서 기초가 되고있는 IP 이다. 간단히 말하면 네트워크에서 말하는 IP와 똑같이 작동한다. 대신 AWS에서는 IP 표기법을 CIDR를 사용하여 표기하고 사용하고 있다.
이제 본격적으로 VPC라는것을 알아보겠다. VPC는 (Virtual Private Cloud)로 AWS에서 네트워크 환경을 말한다. VPC 내에서 AWS 리소스를 시작할 수 있으며 VPC는 하나의 리전에 배포되며 여러 가용영역을 걸쳐 만들어지게 된다. 그외에도 IP 범위 선택, 서브넷 생성, 라우팅 테이블 등등 많은 기능을 제공한다.

VPC가 가능 큰 단위였고 실제 리소스가 배치되는 공간은 그 다음으로 작은 단위 서브넷이다. 서브넷은 VPC내의 IP 주소범위이다. 그런다음 서브넷 내에서 리소스를 시작할 수 있다. 서브넷은 퍼블릭 서브넷, 프라이빗 서브넷 으로 나눠진다. 간단하게 퍼블릭 서브넷은 인터넷이 연결되는 공간이고 프라이빗 서브넷은 인터넷이 연결되지 않는 격리된 공간이다. (보안적인 측면으로 안전함)
만약 VPC의 IP가 10.0.0.0/16 이였다면 서브넷은 그보다 더작은 범위로
public-subnet10.0.1.0/24, private-subnet10.0.2.0/24 다음과 같은 방식으로 나눠지게 된다.
서브넷에서 IP범위를 정하고나면 그 범위 안에서 사용할 수 있는 IP가 있고 사용할 수 없는 IP도 있다. 10.0.1.0/24를 예시로 들면..
이제 퍼블릭 서브넷을 알아보겠다. 사실 프라이빗 서브넷은 그냥 Public IP가 부여되지 않는 공간이라서 특별한 점이 없는 서브넷이다. 퍼블릭 서브넷은 인터넷이 통하는 양방향으로 트래픽 흐름을 허용하게된다. 하지만 퍼블릭 서브넷을 구성할려면 IGW, 라우팅 테이블, Public IP 와 같은 요소가 필요하다.
사실 퍼블릭 서브넷 과 프라이빗 서브넷을 구별하는 제일 좋은 방법은 IGW가 있는가 없는가로 구별하면 된다.

IGW는 수평적으로 확장되고 고가용성이다. 주 역할은 VPC 내의 인스턴스와 인터넷 간 통신을 허용하게된다. 또한 NAT(주소 변환)을 통해 IP 주소를 보호하게 된다.
그림을 보면 VPC 에 인터넷 게이트웨이가 있다. 그럼 이런 의문이들 수도 있다. 퍼블릭, 프라이빗 서브넷 둘다 VPC에 있는데 그럼 둘다 퍼블릭 서브넷이 아니냐? 결론적으로 말하면 아니다...
인터넷 트래픽을 라우팅 테이블로 통해 어디로 보내느냐가 중요하다.. 프라이빗 서브넷의 라우팅 테이블을 보면 아마도 IGW로 나가지 않게 되어있을 가능성이 매우 크다..
라우팅 테이블은 말 그대로 트래픽 전달 위치를 결정하게 되는데 기본적인 라우팅 테이블은 VPC IP이고 그이후는 추가해야한다. 즉 이말은 디폴트 라우팅 테이블을 통해 VPC 내부의 인스턴스는 모두다 서로 통신이 가능하다.
탄력적 IP 주소는 Public IP 주소이다. 하지만 동적으로 동작한다. 이 탄력적 IP 주소는 계정/리전 당 5개로 제한된다. 이 주소는 인스턴스 또는 네트워크 인터페이스와 연결이 가능한다. 동적이라는 말은 다른 인스턴스에 빠르게 맵핑하게 인스턴스 장애를 해결 할 수 있다.

탄력적 NIC는 가상 네트워크 카드를 나타내는 논리적 네트워크 구성 요소이다. 다른점이 있다면 네트워크 인터페이스에 탄력적 IP 주소, Mac주소, 프라이빗 IP 주소를 유지하며 인스턴에 연결이 가능하다.
NAT 게이트웨이는 IP 주소보호를 위해 사용하지만 프라이빗 서브넷에 존재하는 인스턴스가 인터넷 연결을 허용하기 위해 사용할 수도 있다. 이게 무슨 말이냐면 외부에서는 인스턴스에 접근을하지 못하지만 인스턴스는 인터넷을 사용할 수 있다. 이러한 구조를 통해 보안에 조금더 신경쓸 수 있다.
NGW가 있기 전에는 NAT 인스턴스를 사용했다고 한다. 근데 문제점이 고가용성 장애를 대비하기 어려웠다는 건데 NGW는 여러 가용영역에 걸쳐 배포되기 때문에 고가용성이 보장된다.
AWS에서 네트워크적인 보안 요소는 많지만 그 중에서 대표적으로 ACL, 보안 그룹이 존재한다.

ACL은 일단 선택적 보안 계층이다. 즉, 사용자가 사용하느냐 아니면 사용을 안하느냐에따라 달라진다.
기본적인 설정은 모든 인바운드 및 아웃바운드 트래픽을 허용하게 되는데 사용자 정의 ACL을 생성하여 서브넷에 연결이 가능하다.

보안 그룹은 인바운드 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 한다. 하지만 보안 그룹은 대상이 서브넷이 아니라 인스턴스를 대상으로한다. 즉 이말은 서브넷에 2개의 EC2 인스턴스가 있다면 각 인스턴스에 다르게 보안 그룹을 적용할 수 있다는 말이다.
보안 그룹의 기본은 모든 인바운드 트래픽은 거부하고 모든 아웃바운드 트래픽은 허용이다.
사실 이렇게만 보면 ACL 그리고 보안 그룹이 비슷하고 뭐가 다른지 확인이 힘들다. 그래서 한번 비교를 해보겠다.