AWS VPC [1/2]

J-USER·2023년 8월 14일
0

DevOps

목록 보기
10/10

VPC Fundmental

VPC

  • 가상 프라이빗 클라우드는 AWS 계정 전용 가상 네트워크입니다. AWS 클라우드의 다른 가상 네트워크와 논리적으로 격리되어 있습니다.

  • VPC를 통해 사용자는 자신의 IP 주소 범위 선택, 서브넷 생성, 라우트 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있습니다.

  • VPC에서는 리소스 및 애플리케이션에 안전하고 쉽게 액세스할 수 있도록 VPC에서 IPv4와 IPv6를 모두 사용할 수 있습니다.

  • VPC는 지역 서비스이며 해당 지역의 모든 AZ에 걸쳐 제공됩니다. 가용 영역(AZ)은 각 리전 내의 격리된 여러 위치입니다.

VPC Sizing

  • VPC는 2^16(65536) IP 주소를 사용할 수 있는 10.0.0.0/16과 같은 클래스 없는 도메인 간 라우팅(CIDR) 블록 형태의 IP 주소 집합이 필요합니다.

  • 허용되는 CIDR 블록 크기는 다음 사이입니다.
    - /28 넷마스크(2^4 - 16 사용 가능한 IP 주소의 경우 최소) 및
    - /16 넷마스크(2^16 - 65536 IP 주소 사용 시 최대) 사이입니다.

  • 사설(공개적으로 라우팅할 수 없는) IP 주소의 CIDR 블록을 할당할 수 있습니다.
    - 10.0.0.0 - 10.255.255.255(10/8 접두사)
    - 172.16.0.0 - 172.31.255.255(172.16/12 접두사)
    - 192.168.0.0 - 192.168.255.255(192.168/16 접두사)

  • 공개적으로 라우팅 가능한 IP 주소의 범위를 지정할 수 있지만, 현재 VPC의 공개적으로 라우팅 가능한 CIDR 블록에서 인터넷에 직접 액세스하는 것은 지원되지 않습니다.

  • VPC에 한 번 할당된 CIDR 블록은 수정할 수 없습니다.

    참고 - 이제 VPC 크기를 조정할 수 있습니다. AWS 블로그 게시물을 참조하세요.

  • VPC와 회사 또는 홈 네트워크 간 연결은 설정할 수 있지만, CIDR 블록이 겹치지 않아야 합니다(예: CIDR 10.0.0.0/16인 VPC는 10.1.0.0/16 회사 네트워크와 통신할 수 있지만, IP 주소가 겹쳐서 10.0.37.0/16 회사 네트워크에 연결을 시도하면 연결이 끊어집니다).

VPC 특징

  • VPC에서 시작된 인스턴스에 대한 tenancy 옵션을 설정할 수 있습니다. 기본적으로 tenancy 옵션은 공유됩니다. 전용 옵션을 선택하면 그 안에 있는 모든 인스턴스가 개별 인스턴스 테넌시 설정을 무시하고 전용 하드웨어에서 시작됩니다.
    (Tenancy: 이 VPC에서 EC2 인스턴스를 생성할 때 전용 하드웨어 사용 옵션)

  • VPC를 삭제하려면 VPC 내의 모든 인스턴스를 종료하고 서브넷, 보안 그룹, 네트워크 ACL, 라우트 테이블, 인터넷 게이트웨이, VPC 피어링 연결, DHCP 옵션 등 VPC와 관련된 모든 구성 요소를 삭제한 후에만 삭제할 수 있습니다.

  • VPC 피어링은 두 VPC(동일하거나 다른 계정 및 지역) 간에 네트워킹 연결을 제공하여 개인 IPv4 주소 또는 IPv6 주소를 사용하여 트래픽을 라우팅할 수 있도록 합니다.

  • NAT 게이트웨이는 사설 서브넷의 인스턴스가 인터넷에 연결할 수 있도록 허용하지만 인터넷이 인스턴스와의 연결을 시작하지 못하도록 차단합니다.

  • VPC 엔드포인트를 사용하면 프라이빗 IP 주소를 사용하여 VPC와 지원되는 AWS 서비스 및 PrivateLink로 구동되는 VPC 엔드포인트 서비스 간에 프라이빗 연결을 생성할 수 있습니다.

Subnets

  • 서브넷은 단일 가용 영역에 걸쳐 있으며, 다른 AZ의 장애로부터 격리되도록 설계된 별개의 위치이며, AZ를 가로질러 확장될 수 없습니다.

  • 서브넷은 인터넷 게이트웨이로 구성하여 인터넷을 통한 통신을 사용하거나, 가상 사설 게이트웨이(VPN) 연결을 통해 회사 네트워크와의 통신을 사용할 수 있습니다.

  • 서브넷은 public 또는 private일 수 있으며 인터넷 연결이 있는지, 즉 IGW를 통해 인터넷으로 트래픽을 라우팅할 수 있는지 여부에 따라 달라집니다.

  • public 서브넷 내의 인스턴스는 인터넷과 통신할 수 있도록 공용 IP 또는 Elastic IP 주소가 할당되어야 합니다.

  • 인터넷에 연결되지 않고 Virtual Private Gateway를 통해서만 트래픽이 라우팅되는 서브넷을 VPN-only 서브넷이라고 합니다.

  • 서브넷은 기본적으로 서브넷 내에서 시작된 모든 인스턴스에 Public IP 주소 할당을 사용하도록 구성할 수 있으며, 인스턴스를 생성하는 동안 재정의할 수 있습니다.

  • AWS는 각 서브넷에서 사용할 수 없고 인스턴스에 할당할 수 없는 5개의 IP 주소(처음 4개 및 마지막 1개의 IP 주소)를 assigned 합니다. 예를 들어, CIDR 블록이 10.0.0.0/24인 서브넷의 경우 다음 5개의 IP가 예약됩니다.

    1. 10.0.0.0: 네트워크 주소
    2. 10.0.0.1: VPC 라우터를 위해 AWS가 assigned
    3. 10.0.0.2: Amazon 제공 DNS에 매핑하기 위해 AWS에서 assigned
    4. 10.0.0.3: 향후 사용을 위해 AWS에서 assigned
    5. 10.0.0.255: 네트워크 브로드캐스트 주소. AWS는 VPC에서 브로드캐스트를 지원하지 않으므로 이 주소는 예약되어 있습니다.

Subnet Routing

  • 각 서브넷은 트래픽을 제어하는 라우트 테이블과 연결되어 있습니다. 만약 테이블이 없다면 vpn 의 main 라우트 테이블을 사용합니다.

Subnet Security

  • 서브넷 보안은 보안 그룹 및 NACL을 사용하여 구성할 수 있습니다.
  • 보안 그룹은 인스턴스 수준에서 작동하고 NACL은 서브넷 수준에서 작동합니다.

VPC & Subnet Sizing

  • IPv6 CIDR 블록은 선택적으로 VPC에 연결할 수 있습니다.

  • VPC IPv4 CIDR 블록은 한 번 생성되면 수정할 수 없으며, 기존 CIDR 블록의 크기를 늘리거나 줄일 수 없습니다. 그러나 보조 CIDR 블록을 VPC에 연결하여 VPC를 확장할 수 있습니다.

    제한 사항

    • 허용되는 블록 크기는 /28 netmask와 /16 netmask 사이입니다.
    • CIDR 블록은 VPC에 연결된 기존 CIDR 블록과 겹치지 않아야 합니다.
    • CIDR 블록은 VPC 라우트 테이블에 있는 경로의 CIDR 범위와 같거나 커서는 안 됩니다(예: 10.0.0.0/24 CIDR 블록의 경우 10.0.0.0/25와 같은 더 작은 CIDR 블록만 연결할 수 있음).

IP Addresses

Private IP Addresses

  • Private IP 주소는 인터넷을 통해 연결할 수 없으며, VPC 내의 인스턴스 간 통신에만 사용할 수 있습니다.

  • 모든 인스턴스에는 서브넷의 IP 주소 범위 내에서 기본 네트워크 인터페이스에 Private IP 주소가 할당됩니다.

  • 기본 IP 주소는 인스턴스가 중지되었다가 다시 시작되는 경우에도 평생 동안 네트워크 인터페이스에 연결되며 인스턴스가 종료될 때만 해제됩니다.

  • Additional Private IP 주소라고 하는 Additional Private IP 주소를 인스턴스에 할당할 수 있으며, 이러한 주소는 한 네트워크 인터페이스에서 다른 네트워크 인터페이스로 재할당할 수 있습니다.

Public IP address

  • Public IP 주소는 인터넷을 통해 연결할 수 있으며, 인스턴스와 인터넷 간 또는 공용 엔드포인트가 있는 다른 AWS 서비스와의 통신에 사용할 수 있습니다.

  • 인스턴스에 대한 Public IP 주소 할당은 서브넷에 대해 Public IP 주소 지정이 활성화되어 있는지 여부에 따라 달라집니다.

  • 인스턴스를 생성하는 동안 서브넷의 Public IP 주소를 재정의하여 인스턴스에 공용 IP 주소를 할당할 수도 있습니다.

  • Public IP 주소는 AWS IP 주소 풀에서 할당되며 AWS 계정과 연결되지 않으므로 인스턴스가 중지되었다가 다시 시작되거나 종료될 때 해제됩니다. 즉, 새로운 Public IP가 할당 됩니다.

Elastic IP address

  • Elastic IP 주소는 필요에 따라 인스턴스와 연결 및 연결 해제할 수 있는 정적 영구 공용 IP 주소입니다.

  • Elastic IP 주소는 VPC에 할당되며, 해제되지 않는 한 계정이 소유합니다.

  • 네트워크 인터페이스에는 Public IP 또는 Elastic IP를 할당할 수 있습니다. 이미 Public IP가 있는 인스턴스에 Elastic IP를 할당하면 Public IP가 해제됩니다.

  • Elastic IP 주소는 한 인스턴스에서 다른 인스턴스로 이동할 수 있으며, 이는 동일한 계정 내의 동일하거나 다른 VPC 내에 있을 수 있습니다.

  • Elastic IP는 사용하지 않는 경우, 즉 중지된 인스턴스 또는 연결되지 않은 네트워크 인터페이스와 연결되지 않거나 연결되지 않은 경우 요금이 부과됩니다.

Elastic Network Interface (ENI)

각 인스턴스는 ENI(기본 네트워크 인터페이스 eth0)에 연결되며 인스턴스에서 분리할 수 없습니다.

  • ENI는 인스턴스에서 연결 또는 분리되었다가 다른 인스턴스에 다시 연결될 때 attributes은 유지 됩니다. ENI가 한 인스턴스에서 다른 인스턴스로 이동하면 네트워크 트래픽이 새 인스턴스로 redirected 됩니다.

ENI의 속성

  • 기본 private IP 주소
  • 하나 이상의 secondary private IP 주소
  • Private IP 주소당 하나의 Elastic IP 주소
  • 인스턴스를 시작할 때 eth0용 네트워크 인터페이스에 자동 할당될 수 있는 하나의 public IP (기존 ENI를 사용하는 대신 eth0용 네트워크 인터페이스를 생성하는 경우에만 해당).
  • 하나 이상의 보안 그룹
  • MAC 주소
  • 소스/대상 확인 플래그
  • 설명
  • 여러 ENI를 인스턴스에 연결할 수 있습니다.

    ex) 관리 네트워크 생성,
    VPC에서 네트워크 및 보안 어플라이언스 사용,
    서로 다른 서브넷에 워크로드/역할이 있는 듀얼 홈 인스턴스 생성,
    저예산, 고가용성 솔루션 만들기...

Route Tables

  • 각 VPC에는 Main Route table이 있으며 여러 개의 사용자 지정 경로 테이블을 생성할 수 있습니다.

  • 서브넷은 라우트 테이블에 명시적으로 연결되지 않은 경우 Main Route table에 암시적으로 연결됩니다.

  • 모든 라우트 테이블에는 수정하거나 삭제할 수 없는 VPC 내의 통신을 가능하게 하는 로컬 경로가 포함되어 있습니다.

  • 경로 우선 순위는 트래픽과 일치하는 경로 테이블에서 가장 구체적인 경로로 결정됩니다.

  • 인터넷 게이트웨이, 가상 사설 게이트웨이, VPC 피어링, VPC 엔드포인트, NAT 장치 등에 대한 경로를 정의하려면 경로 테이블을 업데이트해야 합니다.

SG vs NACLs

VPC에서는 보안 그룹과 네트워크 ACL(NACLS)이 함께 계층화된 네트워크 방어를 구축하는 데 도움이 됩니다.

보안 그룹 - 연결된 인스턴스에 대한 가상 방화벽 역할을 하여 인스턴스 수준에서 인바운드 및 아웃바운드 트래픽을 모두 제어합니다.

NACL(네트워크 액세스 제어 목록) - 연결된 서브넷에 대한 방화벽 역할을 하여 서브넷 수준에서 인바운드 및 아웃바운드 트래픽을 모두 제어합니다.

SG

  • 서브넷 수준이 아닌 인스턴스 수준에서 작동합니다.

  • 서브넷 내의 각 인스턴스에는 서로 다른 보안 그룹 집합이 할당될 수 있습니다.

  • 인스턴스에는 5개의 보안 그룹이 할당될 수 있으며 각 보안 그룹에는 50~60개의 규칙이 있습니다.

  • 인바운드 및 아웃바운드 트래픽에 대해 별도의 규칙을 허용합니다.

  • 인스턴스에 대한 인바운드(수신) 및 아웃바운드(송신) 트래픽 모두에 대한 규칙을 추가하거나 제거(액세스 권한 부여 또는 취소)할 수 있습니다.

  • default 보안 그룹은 외부 인바운드 트래픽을 허용하지 않지만 동일한 보안 그룹을 가진 인스턴스에서 인바운드 트래픽을 허용합니다.
  • default 보안 그룹은 모든 아웃바운드 트래픽을 허용합니다.
  • 허용 규칙만 지정할 수 있고 거부 규칙은 지정할 수 없습니다.

  • 특정 IP, CIDR 범위 또는 VPC 또는 피어 VPC의 다른 보안 그룹에 대한 액세스 권한을 부여할 수 있습니다(VPC 피어링 연결 필요).

  • Stateful 합니다. 즉, 허용된 인바운드 트래픽에 대한 응답은 아웃바운드 규칙에 관계없이 아웃바운드로 흐르도록 허용되며, 그 반대의 경우도 마찬가지입니다. 따라서 응답에 대한 아웃바운드 규칙이 필요하지 않습니다.

  • ENI(네트워크 인터페이스)와 연결되어 있습니다.

  • 인스턴스와 연결되어 있고 변경할 수 있으며, 변경하면 기본 네트워크 인터페이스(eth0)와 연결된 보안 그룹이 변경되고 변경 사항은 보안 그룹과 연결된 모든 인스턴스에 즉시 적용됩니다.

Connection Tracking

인바운드 트래픽에 대한 응답은 아웃바운드 보안 그룹 규칙에 관계없이 인스턴스 밖으로 흐를 수 있으며, 그 반대의 경우도 마찬가지입니다.

ex)
인스턴스(호스트 A)가 호스트 B로 트래픽을 시작하고 TCP, UDP 또는 ICMP 이외의 프로토콜을 사용하는 경우, 인스턴스의 방화벽은 호스트 B의 응답 트래픽을 허용하기 위한 목적으로 IP 주소 및 프로토콜 번호만 추적합니다.
호스트 B가 원래 요청 또는 응답 후 600초 이내에 별도의 요청으로 인스턴스에 대한 트래픽을 시작하는 경우, 인스턴스는 응답 트래픽으로 간주되므로 인바운드 보안 그룹 규칙에 관계없이 이를 수락합니다.

NACLs

  • 네트워크 ACL(NACL)은 하나 이상의 서브넷에 들어오고 나가는 트래픽을 제어하기 위한 방화벽 역할을 하는 VPC의 선택적 보안 계층입니다.

  • 세분화된 제어를 위한 것이 아니며 서브넷 수준에서 할당되고 해당 서브넷의 모든 인스턴스에 적용됩니다.

  • 별도의 인바운드 및 아웃바운드 규칙이 있으며, 각 규칙은 트래픽을 허용하거나 거부할 수 있습니다.

  • 기본 ACL은 모든 인바운드 및 아웃바운드 트래픽을 허용합니다.

  • 새로 만든 ACL은 모든 인바운드 및 아웃바운드 트래픽을 거부합니다.

  • 서브넷에는 하나의 NACL만 할당할 수 있으며 명시적으로 연결되지 않은 경우 기본 NACL과 암시적으로 연결됩니다.네트워크 ACL을 여러 서브넷에 연결할 수 있습니다.

  • 번호가 가장 낮은 규칙부터 순서대로 평가되어 네트워크 ACL과 연결된 서브넷의 트래픽 허용 여부를 결정하는 번호가 매겨진 규칙 목록입니다.

    ex) 규칙 번호 100이 모두 허용이고 110이 모두 거부인 경우 모두 허용이 우선시되고 모든 트래픽이 허용됩니다.

  • 허용된 인바운드 트래픽에 대한 응답은 아웃바운드 트래픽에 대한 규칙의 적용을 받습니다.

    ex) 특정 IP 주소의 포트 22에서 인바운드 SSH를 사용하도록 설정한 경우 해당 응답에 대한 아웃바운드 규칙도 추가해야 합니다.

profile
호기심많은 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기