티스토리 뷰
AWS SAA
SAA-C02 자격증 합격 후기에 이어 공부했던 내용들을 간단하게 다시 정리하고 있습니다.
두 번째로는 VPC에 대해서 정리해 보겠습니다.
VPC (Virtual Private Cloud)
소개
Amazon VPC는 EC2의 네트워크 계층이고, EC2 인스턴스를 비롯한 여러 AWS 서비스에 네트워크 리소스를 담을 수 있는 가상 네트워크입니다.
모든 VPC는 기본적으로 다른 모든 네트워크와 격리돼 있지만, 필요할 때는 인터넷 및 다른 VPC 등과 연결할 수 있습니다.
VPC는 한 AWS 리전 안에서만 존재할 수 있으며, 한 리전에 만든 VPC는 다른 리전에서는 보이지 않습니다.
하나의 계정에 여러 VPC를 둘 수 있고 단일 리전에 여러 VPC를 만들 수 있습니다.
VPC CIDR 블록
VPC는 하나 이상의 연속적 IP 주소 범위로 구성되며, CIDR(Classless Inter Domain Routing) 블록으로 표시합니다. ('싸이더'라고 읽습니다)
VPC에서 허용된 CIDR 접두사 길이는 /16부터 /28까지
이고, 다음의 사설망(private) RFC 1918 규격 내에서 VPC CIDR 블록을 지정하는 것이 좋습니다.
- 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
- VPC는 /16 이하여야 합니다. (ex. 10.0.0.0/16)
- 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
- VPC는 /16 이하여야 합니다. (ex. 172.31.0.0/16)
- 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
- VPC는 더 작을 수 있습니다. (ex. 192.168.0.0/20)
보조 CIDR 블록
VPC를 만든 후에도 추가적으로 보조 CIDR 블록을 지정할 수 있습니다.
보조 CIDR 블록은 기본 CIDR 주소 범위나 퍼블릭에서 라우팅이 가능한 범위 내에서 생성돼야 하고, 기본 블록 또는 다른 보조 블록과 겹치지 않아야 합니다.
서브넷
서브넷은 VPC 내에 있는 논리 컨테이너로 EC2 인스턴스를 배치하는 장소입니다.
서브넷을 통해 인스턴스를 서로 격리하고, 인스턴스 간 트래픽 흐름을 제어하고, 인스턴스를 기능별로 모아둘 수 있습니다.
- 각 서브넷은 단일 가용 영역과 매핑됩니다.
- 생성한 모든 서브넷은 VPC의 메인 라우팅 테이블에 자동으로 매핑됩니다.
서브넷 트래픽이 인터넷 게이트웨이로 라우팅되는 경우 해당 서브넷을 퍼블릭 서브넷이라고 합니다.
(위 그림에서 0.0.0.0/0 -> igw-id
로 매핑되는 서브넷)
반대로 인터넷 게이트웨이로 라우팅되지 않는 서브넷을 프라이빗 서브넷이라고 합니다.
서브넷 CIDR 블록
서브넷의 CIDR은 VPC CIDR의 일부이면서, VPC 내에서 고유해야 합니다.
AWS는 모든 서브넷에서 처음 4개 IP 주소와 마지막 IP 주소를 예약하며, 이 주소는 인스턴스에 할당할 수 없습니다.
VPC는 보조 CIDR를 가질 수 있지만, 서브넷에는 하나의 CIDR만 있습니다.
VPC에 기본 CIDR와 보조 CIDR가 있는 경우, 그 중 하나에서 서브넷 CIDR를 생성할 수 있습니다.
Default 서브넷
기본 서브넷은 메인 라우팅 테이블이 인터넷 게이트웨이로 서브넷의 요청을 보내기 때문에 기본적으로 public 서브넷입니다.
인터넷 게이트웨이로 향하는 기본 destination인 0.0.0.0/0
라우팅을 제거하고 private 서브넷으로 만들 수도 있습니다.
기본 서브넷에서 시작한 EC2 인스턴스는 public IPv4 주소와 private IPv4 주소를 모두 받을 수 있고, 반대로 기본 VPC 안의 일반 서브넷에서 시작한 인스턴스는 public 주소를 받지 못합니다.
단, 일반 서브넷에서 인스턴스 시작 마법사로 인스턴스를 생성하면 예외적으로 public 주소를 지정할 수 있습니다.
가용 영역
서브넷은 하나의 가용 영역(AZ, Availabiliy Zone) 내에서만 존재할 수 있습니다.
AWS 리전의 가용 영역들은 서로 프라이빗하게 연결돼 있으며, 한 가용 영역에 장애가 발생하더라도 다른 영역에 장애의 영향이 미치지 않도록 설계되어 있습니다.
서로 다른 가용 영역에 서브넷을 하나씩 만든 다음 인스턴스를 각각 서브넷에 분산해서 만들면, 애플리케이션은 복원성을 확보할 수 있습니다.
애플리케이션의 가용성을 높이는 대표적인 방법입니다.
탄력적 네트워크 인터페이스
탄력적 네트워크 인터페이스(ENI, Elastic Network Interface)를 사용하면 인스턴스가 AWS 서비스, 다른 인스턴스, 온프레미스 서버, 인터넷 등 다른 네트워크 리소스와 통신할 수 있게 됩니다.
모든 인스턴스에는 기본 ENI가 있어야 하며 이 인터페이스는 하나의 서브넷에만 연결됩니다.
ENI는 인스턴스와 독립적으로 존재할 수 있는데, 먼저 ENI를 생성하고 나중에 인스턴스에 연결할 수도 있습니다.
기존 ENI를 가져와서 기존 인스턴스에 보조 ENI로 연결할 수 있으며, 장애가 있는 인스턴스에서 ENI를 분리해 작동하고 있는 다른 인스턴스에 연결하면 트래픽을 장애 인스턴스에서 정상 인스턴스로 전환할 수 있습니다.
참고로 ENI는 인스턴스가 stopped 상태가 되더라도 분리되지 않습니다.
VPC Peering Connection
VPC Peering Connection은 서로 다른 두 VPC 간에 트래픽을 라우팅할 수 있도록 하는 네트워킹 연결입니다.
VPC 피어링 연결은 원활한 데이터 전송에 많은 도움이 되는데요.
예를 들어 AWS 계정이 두 개 이상인 경우 이들 계정을 대상으로 VPC를 피어링하여 파일 공유 네트워크를 만들 수 있습니다.
VPC 피어링 연결을 사용하여 다른 VPC가 사용자의 VPC 중 하나에 있는 리소스에 액세스하도록 허용할 수도 있습니다.
Peering Connection이 항상 가능한 것은 아닌데요, 다음과 같은 상황에서는 피어링 구성이 지원되지 않습니다.
- 겹치는 CIDR 블록
- 중첩되는 CIDR 블록이 있으면 VPC 피어링 연결을 만들 수 없습니다.
- 전이적 피어링 (transitive peering)
- A-B-C 로 연결되어 있을 때, VPC B를 통해 VPC A에서 VPC C로 직접 패킷을 라우팅할 수 없습니다.
- 게이트웨이 또는 private 연결을 통한 엣지 간 라우팅
- A-B 연결에서 B에 인터넷 게이트웨이를 통한 인터넷 연결, AWS Direct Connect 연결, 프라이빗 서브넷에서 NAT 디바이스를 통한 인터넷 연결 등이 있는 경우, A에서 해당 외부 연결에 있는 리소스에 액세스할 수 없습니다.
보안 그룹 (Security Group)
보안 그룹은 EC2 인스턴스에 대한 방화벽 역할을 합니다.
어떤 IP에서 오는 트래픽을 통과시킬지, 인스턴스 수준에서 인바운드 트래픽과 아웃바운드 트래픽을 모두 제어하는 일종의 규칙 집합입니다.
다음과 같은 특징들을 잘 알아두어야 합니다.
- 인스턴스 레벨에서 운영됩니다.
- 허용 규칙만 지원합니다.
- 상태 저장: 규칙에 관계없이 반환 트래픽이 자동으로 허용됩니다.
- 트래픽 허용 여부를 결정하기 전에 모든 규칙을 전부 평가합니다.
- 인스턴스 시작 시 누군가 보안 그룹을 지정하거나, 나중에 보안 그룹을 인스턴스와 연결하는 경우에만 인스턴스에 적용됩니다.
Network ACL
보안 그룹보다 좀 더 큰 개념으로 Network ACL이 있는데요, 보안 그룹이 인스턴스 레벨에서 제어하는 규칙이었다면, ACL은 서브넷 간의 통신 규칙을 관리합니다.
보안 그룹과 동작 방식이 다르기 때문에 비교해서 정확하게 알아두는 것이 좋습니다.
ACL에는 다음과 같은 특징이 있습니다.
- 서브넷 레벨에서 운영됩니다.
- 허용 및 거부 규칙을 모두 지원합니다.
- 상태 비저장: 반환 트래픽이 규칙에 의해 명시적으로 허용되어야 합니다.
- 트래픽 허용 여부를 결정할 때 번호가 가장 낮은 규칙부터 순서대로 규칙을 처리합니다.
- 연결된 서브넷의 모든 인스턴스에 자동 적용됩니다. (보안 그룹 규칙이 지나치게 허용적일 경우 추가 보안 계층 제공합니다.)
VPC 엔드포인트
VPC와 AWS 서비스를 private 연결할 수 있도록 하는 서비스입니다.
- 엔드포인트 서비스 (AWS PrivateLink)
- VPC에 있는 자체 애플리케이션입니다.
다른 AWS 보안 주체는 VPC에서 사용자의 엔드포인트 서비스로 이어지는 연결을 생성할 수 있습니다. - AWS PrivateLink는 VPC와 서비스 간의 모든 네트워크 트래픽을 Amazon 네트워크로 제한합니다.
인터넷 게이트웨이, NAT 디바이스 또는 가상 프라이빗 게이트웨이가 필요 없습니다.
- VPC에 있는 자체 애플리케이션입니다.
- 게이트웨이 엔드포인트
- 특정 AWS 서비스로 전달되는 트래픽에 대해 라우팅 테이블에서 경로 대상으로 지정하는 게이트웨이입니다.
다음 두 가지의 AWS 서비스가 지원됩니다.- Amazon S3
- DynamoDB
- 특정 AWS 서비스로 전달되는 트래픽에 대해 라우팅 테이블에서 경로 대상으로 지정하는 게이트웨이입니다.
- 인터페이스 엔드포인트
- 프라이빗 IP 주소를 가진 탄력적 네트워크 인터페이스이며, 지원되는 서비스로 전달되는 트래픽에 대한 진입점 역할을 하는 서브넷의 IP 주소 범위에 있습니다.
인터페이스 엔드포인트는 AWS PrivateLink로 지원하며, 이 기술을 통해 프라이빗 IP 주소를 사용하여 서비스에 비공개로 액세스할 수 있습니다.
- 프라이빗 IP 주소를 가진 탄력적 네트워크 인터페이스이며, 지원되는 서비스로 전달되는 트래픽에 대한 진입점 역할을 하는 서브넷의 IP 주소 범위에 있습니다.
Internet Gateway (IGW)
인터넷 게이트웨이는 퍼블릭 IP 주소를 할당받은 인스턴스가 인터넷과 연결돼서 인터넷으로부터 요청을 수신하는 기능을 제공합니다.
VPC에는 하나의 게이트웨이만 연결할 수 있습니다.
인터넷 게이트웨이에는 관리형 IP 주소나 네트워크 인터페이스가 없는 대신, 식별을 위해 AWS 리소스 ID가 할당됩니다.
리소스 ID는 igw-
로 시작하며 그 뒤에 영숫자 문자열이 옵니다.
NAT 디바이스
네트워크 주소 변환은 인터넷 게이트웨이에서 이뤄지지만, 다음 두 가지 서비스도 네트워크 주소 변환을 수행합니다.
- NAT 게이트웨이
- NAT 인스턴스
AWS는 이를 NAT 디바이스
라고 하며, 인스턴스가 인터넷에 액세스할 수 있게 하면서 인터넷상의 호스트에서는 인스턴스에 직접 도달하지 못하게 할 때 사용합니다.
이 기능은 인스턴스가 업데이트 패치를 받거나 데이터를 업로드할 때 인터넷에 연결할 필요는 있지만, 클라이언트 요청에 응답할 필요는 없을 때 유용합니다.
이러한 특성 때문에 시험에 자주 등장하니 다음 서비스를 잘 알아두면 좋습니다.
NAT 게이트웨이
NAT 게이트웨이는 AWS에서 관리하는 NAT 디바이스이며, 인터넷 게이트웨이처럼 하나의 NAT 게이트웨이로 어떠한 용량의 요청도 처리할 수 있습니다.
보통 NAT 디바이스를 사용해야 한다면 NAT 게이트웨이로 구성을 하게 됩니다.
NAT 게이트웨이를 생성할 때 EIP도 함께 할당해서 연결해야 하고, 퍼블릭 서브넷 한 곳에 배포해서 인터넷에 액세스할 수 있게 해야 합니다.
NAT 인스턴스
NAT 인스턴스는 사전 구성된 Linux 기반 AMI를 사용하는 일반적인 EC2 인스턴스이며, 여러 면에서 NAT 게이트웨이처럼 작동하지만 NAT 인스턴스는 몇 가지 중요한 다른 점이 있습니다.
NAT 게이트웨이와는 달리 NAT 인스턴스는 대역폭 요구가 증가하더라도 자동으로 확장되지 않습니다.
따라서 적절한 성능을 갖춘 인스턴스 유형을 선택히는 것이 중요한데요, 대역폭 요구가 증가하면 직접 더 큰 인스턴스 유형으로 업그레이드해야 합니다.
만약 인스턴스나 가용 영역에 장애가 발생하면 다른 NAT 인스턴스로 확장하는 정도로는 간단히 대처할 수 없는데, 이는 기본 라우팅에 여러 NAT 인스턴스를 대상으로 경로를 지정할 수 없기 때문입니다.
그리고 NAT 인스턴스에는 ENI가 있으므로 보안 그룹을 적용해야 하고 퍼블릭 IP 주소도 할당해야 합니다.
NAT 인스턴스의 한 가지 이점은 배스천 호스트(Bastion Host, 또는 점프 호스트)로 사용해서 퍼블릭 IP가 없는 인스턴스에 연결할 수 있다는 것이며, NAT 게이트웨이로는 이 작업을 수행할 수 없습니다.
VPN 연결
VPN 연결 옵션을 사용하여 Amazon VPC를 원격 네트워크 및 사용자에 연결할 수 있습니다.
- AWS Site-to-Site VPN
- VPC와 원격 네트워크 사이에 IPsec (IP Security) VPN 연결을 생성할 수 있습니다.
- AWS Client VPN
- AWS 리소스 또는 온프레미스 네트워크에 안전하게 액세스할 수 있도록 하는 관리형 클라이언트 기반 VPN 서비스.
- 사용자가 연결할 수 있는 엔트포인트를 구성하여 보안 TLS VPN 세션을 설정할 수 있습니다.
- AWS VPN CloudHub
- 원격 네트워크가 두 개 이상인 경우(지사 사무실이 여러 곳인 경우), 가상 프라이빗 게이트웨이를 통해 AWS Site-to-Site VPN 연결을 생성할 수 있습니다.
- 타사 소프트웨어 VPN 어플라이언스
- 타사 소프트웨어 VPN 어플라이언스를 실행 중인 VPC에서 EC2 인스턴스를 사용하여 VPN 연결을 생성할 수 있습니다.
'devOps' 카테고리의 다른 글
[AWS SAA] 4. CloudFront, Route 53, API Gateway (0) | 2021.02.11 |
---|---|
[AWS SAA] 3. Storage Service (0) | 2021.02.10 |
[AWS SAA] 1. EC2, Auto Scaling, ELB (0) | 2021.02.08 |
AWS SAA-C02 합격 후기 (0) | 2021.02.07 |
Github Actions + CodeDeploy + Nginx 로 무중단 배포하기 (3) (0) | 2020.08.20 |