VPC를 사용하면 논리적으로 격리된 가상 네트워크에서 AWS 리소스를 시작할 수 있다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사하다.
서브넷: VPC의 IP 주소 범위, 단일 가용 영역에 상주
라우팅: 라우팅 테이블을 사용해서 서브넷 또는 게이트웨이의 네트워크 트래픽이 전달되는 위치를 결정
게이트웨이 및 엔드포인트: 게이트웨이는 VPC를 다른 네트워크에 연결, 인터넷 게이트웨이를 사용하여 VPC를 인터넷에 연결
피어링 연결: VPC 피어링 연결을 사용하여 두 VPC의 리소스 간 트래픽을 라우팅
VPC 흐름 로그: VPC의 네트워크 인터페이스로 들어오고 나가는 IP 트래픽에 대한 정보를 캡처
2. Security in VPC
보안 그룹: 리소스 수준(예: EC2 인스턴스)에서 특정 인바운드 및 아웃바운드 트래픽을 허용, 인스턴스를 시작할 때 하나 이상의 보안 그룹과 연결할 수 있다. VPC의 각 인스턴스는 서로 다른 보안 그룹 세트에 속할 수 있다.
네트워크 액세스 제어 목록(ACL): 네트워크 ACL은 서브넷 수준에서 특정 인바운드 또는 아웃바운드 트래픽을 허용하거나 거부한다.
흐름 로그: VPC의 네트워크 인터페이스에서 양방향으로 이동하는 IP 트래픽에 대한 정보를 캡처한다. VPC, 서브넷 또는 개별 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있다.
흐름 로그 데이터는 CloudWatch logs 또는 Amazon S3에 게시되며 과도하게 제한하거나 과도하게 허용하는 보안 그룹과 네트워크 ACL 규칙을 진단하는 데 도움이 된다.
트래픽 미러링: Amazon EC2 인스턴스의 탄력적 네트워크 인터페이스에서 네트워크 트래픽을 복사할 수 있다.
3. VPC Peering
VPC는 사용자의 AWS 계정 전용 가상 네트워크이다. AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있다.
VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워크 연결이다.
동일한 네트워크에 속하는 경우와 같이 VPC의 인스턴스가 서로 통신할 수 있다. 사용자의 자체 VPC 또는 다른 AWS 계정의 VPC와 VPC 피어링 연결을 만들 수 있으며, VPC는 상이한 리전에 있을 수 있다.
VPC의 기존 인프라를 사용하여 VPC 피어링 연결을 생성한다. 이는 게이트웨이도, VPN 연결도 아니며 물리적 하드웨어 각각에 의존하지 않는다. 그러므로 통신 또는 대역폭 병목에 대한 단일 지점 장애가 없다.
4. VPC Flowlogs
VPC 흐름 로그는 VPC의 네트워크 인터페이스에서 전송되고 수신되는 IP 트래픽에 대한 정보를 수집할 수 있는 기능이다. 흐름 로그 데이터가 게시될 수 있는 위치는 Amazon CloudWatch Logs, Amazon S3 또는 Amazon Data Firehose이다.
흐름 로그를 생성하면 구성한 로그 그룹, 버킷 또는 전송 스트림의 흐름 로그 레코드를 검색하고 볼 수 있다.
5. VPC PrivateLink
VPC에 인터넷 게이트웨이를 추가하여 인터넷 액세스를 허용하거나 VPN 연결을 추가하여 온프레미스 네트워크 액세스를 허용할 수 있다.
VPC의 클라이언트가 프라이빗 IP 주소를 사용하여 다른 VPCs의 서비스 및 리소스에 연결할 수 있도록 AWS PrivateLink 하려면 해당 서비스 및 리소스가 VPC에서 직접 호스팅된 것처럼 사용한다.
6. NAT Instance
NAT 인스턴스는 Network Address Translation(NAT)을 제공한다. NAT 인스턴스를 사용하면 프라이빗 서브넷의 리소스가 인터넷이나 온프레미스 네트워크와 같은 VPC 외부의 대상과 통신할 수 있다. 프라이빗 서브넷의 리소스는 인터넷으로 향하는 아웃바운드 IPv4 트래픽을 시작할 수 있지만 인터넷에서 시작된 인바운드 트래픽을 수신할 수는 없다.
NAT 인스턴스는 퍼블릭 인터넷에 있어야 하며, NAT 인스턴스에는 퍼블릭 IP 주소 또는 탄력적 IP 주소가 있어야 한다.
7. NAT Gateway
NAT 게이트웨이는 NAT 서비스로, 프라이빗 서브넷의 인스턴스가 VPC 외부의 서브넷에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와의 연결을 시작할 수 없도록 NAT 게이트웨이를 사용할 수 있다.
퍼블릭 - (기본값) 퍼블릭 서브넷의 인스턴스는 퍼블릭 NAT 게이트웨이를 통해 인터넷에 연결할 수 이지만 인터넷에서 원치 않는 연결을 수신할 수 없다. 퍼블릭 서브넷에서 퍼블릭 NAT 게이트웨이를 생성하고 생성 시 탄력적 IP 주소를 NAT 게이트웨이와 연결해야 한다.
프라이빗 - 프라이빗 서브넷 인스턴스는 프라이빗 NAT 게이트웨이를 통해 다른 VPC 또는 온프레미스 네트워크에 연결할 수 있다.
8. IPv6 migration
IPv4만을 지원하는 기존 VPC와 서브넷에서 IPv4만을 사용하도록 구성된 리소스가 있으면 VPC 및 리소스에 대한 IPv6 지원을 추가할 수 있다.
특정 도메인을 담당하는 적절한 네임 서버로 DNS 쿼리를 전달하는 과정에서 DNS 쿼리를 해결하는 데 필수적인 권한 있는 네임 서버의 이름을 확인하기 위해 NS(네임 서버) 레코드를 참조한다. 이 특정 도메인에 대한 권한은 다른 네임 서버에 위임할 때 도메인의 권한 있는 네임 서버(실제 DNS 레코드를 갖고 있는 서버)인지 확인하기 위해 필요하며, 해당 도메인이 신뢰할 수 있는지 확인하기 위해 각 도메인마다 DNS 레코드 관리를 담당하는 네임 서버가 존재한다.
예를 들어, 아래와 같이 'example.com'에서 레코드명 'sub.example.com'의 NS 레코드가 생성된 상태에서, 권한 있는 'sub.example.com' 도메인의 호스팅 영역을 찾기 위해 네임 서버가 아래와 같은 'sub.example.com' 호스팅 영역을 조회한다.
이 때, 하위 도메인 'sub.example.com'에 대한 네임 서버 변경이 가능한 경우 도메인의 고유한 권한을 확인할 수 없으므로, 상위 도메인 'example.com'의 'sub.example.com'에 대한 NS 레코드를 일치시켜야 한다.
$ traceroute -m 255 google.com
traceroute to google.com (172.217.161.206), 255 hops max, 40 byte packets
1 10.40.6.2 (10.40.6.2) 9.359 ms 4.503 ms 4.032 ms
2 10.40.240.0 (10.40.240.0) 4.312 ms 7.856 ms 4.707 ms
3 10.40.0.11 (10.40.0.11) 7.454 ms 4.417 ms 5.650 ms
4 10.128.2.139 (10.128.2.139) 6.526 ms 4.745 ms 6.370 ms
5 15.248.4.57 (15.248.4.57) 8.095 ms 7.118 ms 5.761 ms
6 * * *
7 * * *
8 * * *
9 99.82.179.80 (99.82.179.80) 33.133 ms 33.374 ms 33.518 ms
10 99.82.179.81 (99.82.179.81) 34.269 ms 33.815 ms
99.82.179.83 (99.82.179.83) 30.787 ms
11 192.178.108.209 (192.178.108.209) 35.272 ms 34.049 ms
216.239.59.149 (216.239.59.149) 27.305 ms
12 108.170.235.5 (108.170.235.5) 34.331 ms
108.170.235.7 (108.170.235.7) 38.985 ms
108.170.235.5 (108.170.235.5) 34.198 ms
13 kix07s03-in-f14.1e100.net (172.217.161.206) 33.920 ms 33.770 ms 33.259 ms
# 패킷 크기 조정
traceroute google.com 70
$ traceroute google.com 70
traceroute to google.com (172.217.161.206), 64 hops max, 70 byte packets
1 10.40.6.2 (10.40.6.2) 11.566 ms 5.021 ms 5.796 ms
...
# 패킷 테스트 횟수 조정
traceroute -q1 google.com
$ traceroute -q1 google.com
traceroute to google.com (172.217.161.206), 64 hops max, 40 byte packets
1 10.40.6.2 (10.40.6.2) 5.512 ms
...
# DNS 역방향 조회 건너뛰기
traceroute -n google.com
$ traceroute -n google.com
traceroute to google.com (172.217.161.206), 64 hops max, 40 byte packets
1 10.40.6.2 7.717 ms 2.673 ms 3.887 ms
2 10.40.240.0 5.463 ms 2.376 ms 3.898 ms
3 10.40.0.11 4.332 ms 6.298 ms 4.902 ms
4 10.128.2.139 4.251 ms 5.431 ms 3.800 ms
5 15.248.4.57 7.327 ms 6.855 ms 5.558 ms
6 * * *
7 * * *
8 * * *
9 99.82.179.82 28.092 ms 28.069 ms
99.82.179.80 33.980 ms
10 99.82.179.81 33.186 ms
99.82.179.83 29.556 ms
99.82.179.81 32.288 ms
11 192.178.108.209 36.233 ms
216.239.59.149 27.248 ms
192.178.110.61 27.490 ms
12 108.170.235.7 35.891 ms
108.170.235.5 35.220 ms
108.170.235.7 34.109 ms
13 172.217.161.206 33.306 ms 34.519 ms 32.720 ms