Amazon VPC

wjdghks95·2024년 7월 16일
post-thumbnail

사설망과 CIDR

사설망(Private Network)

  • 한정된 IP 주소를 최대한 활용하기 위해 IP 주소를 분할하고자 만든 개념
    • IPv4 기준으로 최대 IP 갯수는 43억개(4,294,967,296)
  • 사설망 내부에는 외부 인터넷 망으로 통신이 불가능한 사설 IP로 구성
  • 외부로 통신할 때는 통신 가능한 공인 IP로 나누어 사용
  • 보통 하나의 망에는 사설 IP를 부여 받은 기기들과 NAT 기능을 갖춘 Gateway로 구성

NAT(Network Address Translation)

사설 IP가 공용 IP로 통신할 수 있도록 주소를 변환해 주는 방법

Dynamic NAT

  • 1개의 사설 IP를 가용 가능한 공인 IP로 연결
  • 공인 IP 그룹(NAT Pool)에서 현재 사용 가능한 IP를 가져와서 연결

Static NAT

  • 하나의 사설 IP를 고정된 하나의 공인 IP로 연결
  • AWS Internet Gateway가 사용하는 방식

PAT(Port Address Translation)

  • 많은 사설 IP를 하나의 공인 IP로 연결
  • NAT Gateway / NAT Instance가 사용하는 방식

CIDR(Classless Inter Domain Routing)

CIDR

  • IP 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식
  • 여러 개의 사설망을 구축하기 위해 망을 나누는 방법

* CIDR Notation

  • IP 주소의 집합
  • 네트워크 주소와 호스트 주소로 구성
  • 각 호스트 주소 숫자만큼의 IP를 가진 네트워크 망 형성 가능
  • A.B.C.D/E 형식
    • 예: 10.0.1.0/24, 172.16.0.0/12
    • A,B,C,D: 네트워크 주소 + 호스트 주소 표시
    • E: 0~32: 네트워크 주소가 몇 bit 인지 표시

* 서브넷

  • 네트워크 안의 네트워크
  • 큰 네트워크를 잘개 쪼갠 단위
  • 일정 IP 주소의 범위를 보유
  • 큰 네트워크에 부여된 IP 범위를 조금씩 잘라 작은 단위로 나눈 후 각 서브넷에 할당

VPC와 서브넷

Virtual Private Cloud(VPC)는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC에서 실행할 수 있습니다. IP 주소 범위와 VPC 범위를 설정하고 서브넷을 추가하고 보안 그룹을 연결한 다음 라우팅 테이블을 구성합니다.

VPC

  • 가상의 데이터센터
  • 원하는 대로 사설망을 구축 가능
  • 부여된 IP 대역을 분할하여 사용 가능
  • 리전 단위

VPC의 사용 사례

  • EC2, RDS, Lambda 등의 AWS의 컴퓨팅 서비스 실행
  • 다양한 서브넷 구성
  • 보안 설정(IP Block, 인터넷에 노출되지 않는 EC2 등 구성)

기본 VPC와 커스텀 VPC

  • 기본 VPC
    • AWS 계정 생성 시 자동으로 생성되어 있음
    • 기본적으로 각 AZ마다 서브넷을 생성
      • 모든 서브넷에서 인터넷 접근이 가능함(퍼블릭 서브넷)
    • 다양한 AWS 서비스가 기본 VPC를 이용하기 때문에, 삭제 시 여러 AWS 서비스 사용에 제약
  • 커스텀 VPC
    • 직접 생성
    • 기본적으로 인터넷에 연결되어 있지 않음
      • 인터넷 게이트웨이와 라우팅 설정 없이 퍼블릭 서브넷 생성 불가능. 즉, 별도의 조치 없이 인터넷으로 연결 가능한 EC2 생성 불가능

VPC의 구성 요소

  • 서브넷
  • 인터넷 게이트웨이
  • NACL/보안그룹
  • 라우트 테이블
  • NAT Instance / NAT Gateway
  • Bastion Host
  • VPC Endpoint

서브넷

  • VPC의 하위 단위로 VPC에 할당된 IP를 더 작은 단위로 분할한 개념
  • 하나의 서브넷은 하나의 가용영역(AZ) 안에 위치
  • CIDR block range로 IP 주소 지정
    • IPv4, IPv6
  • IPv4의 경우 최소 /28 CIDR 이상 ~ 최대 /16
    • 호스트 비트가 32-28=4, 따라서 2^4=16 -5 = 11, 최소 11개 IP 이상 보유
  • IPv6의 경우 /44 ~ /64
  • 서브넷의 종류
    • 퍼블릭 서브넷: 외부에서 인터넷을 통해 연결할 수 있는 서브넷
      • 인터넷 게이트웨이(IGW)를 통해 외부의 인터넷과 연결되어 있음
      • 안에 위치한 인스턴스에 퍼블릭 IP 부여 가능
      • 웹 서버, 어플리케이션 서버 등 유저에게 노출되어야 하는 인프라
    • 프라이빗 서브넷: 외부에서 인터넷을 통해 연결할 수 없는 서브넷
      • 외부 인터넷으로 경로가 없음
      • 퍼블릭 IP 부여 불가능
      • 데이터베이스, 로직 서버 등 외부에 노출될 필요가 없는 인프라

※ AWS 서브넷의 IP 갯수

  • AWS의 사용 가능 IP 숫자는 5개를 제외하고 계산
  • 예: 10.0.0.0/24
    • 10.0.0.0: 네트워크 어드레스
    • 10.0.0.1: VPC Router
    • 10.0.0.2: DNS Server
    • 10.0.0.3: 미래에 사용을 위해 남겨둠
    • 10.0.0.255(마지막 번호): 네트워크 브로드캐스트 어드레스(단, 브로드캐스는 지원하지 않음)
    • 총 사용 가능한 IP 갯수는 2^8-5 = 251

VPC Router

  • VPC에 있는 가상의 라우터로 서브넷에서 오고 가는 트래픽을 라우팅. 즉, 모든 서브넷의 트래픽은 VPC 라우터를 거쳐서 목적지에 도달
  • VPC 생성 시 자동으로 생성되며 별도로 관리할 필요가 없음
  • 별도의 설정은 불가능하며, Route Table만 관리 가능

라우트 테이블(Route Table)

  • VPC 라우터에서 트래픽이 어디로 가야 할 지 알려주는 이정표
  • VPC 생성 시 기본으로 하나 제공
  • 구성 요소
    • Destination: 트래픽이 가고자 하는 주소
    • Target: 트래픽을 실제로 보내줄 대상

인터넷 게이트웨이

  • VPC가 외부의 인터넷과 통신할 수 있도록 경로를 만들어주는 리소스
  • 기본적으로 확장성과 고가용성이 확보되어 있음
  • IPv4, IPv6 지원
    • IPv4의 경우 NAT 역할
  • Route Table에서 경로 설정 후에 접근 가능
  • 무료

NAT Gateway와 Bastion Host

NAT Gateway

NAT 게이트웨이는 Amazon Virtual Private Cloud(Amazon VPC)의 프라이빗 서브넷에 있는 인스턴스에서 인터넷에 쉽게 연결할 수 있도록 지원하는 가용성이 높은 AWS 관리형 서비스입니다.

NAT Gateway / NAT Instance

  • 프라이빗 서브넷의 리소스가 외부의 인터넷과 통신하기 위한 통로
  • NAT Instance는 단일 EC2 인스턴스 / NAT Gateway는 AWS에서 제공하는 서비스
  • NAT Gateway는 고가용성이 확보된 관리형 서비스
  • NAT Gateway / NAT Instance는 모두 서브넷 단위
    • Public Subnet에 있어야 함
    • 고가용성 확보를 위해서는 두 개 이상의 가용영역(서브넷) 필요

Bastion Host

외부에서 사설 네트워크에 접속할 수 있도록 경로를 확보해주는 서버

Bastion Host

  • 프라이빗 서브넷 안의 리소스에 접근하기 위한 EC2 인스턴스
  • 퍼블릭 서브넷에 위치해야 함

보안 그룹

보안 그룹

  • Network Access Control List(NACL)와 함께 방화벽 역할을 하는 서비스
  • Port 허용
    • 기본적으로 모든 포트는 비활성화
    • 선택적으로 트래픽이 지나갈 수 있는 Port와 Source를 설정 가능
    • Deny는 불가능 -> NACL로 가능함
  • 인스턴스 단위(정확히는 ENI 단위)
    • 하나의 인스턴스에 하나 이사으의 보안 그룹 설정 가능
    • NACL의 경우 서브넷 단위

보안 그룹의 Stateful

  • 보안 그룹은 Stateful
  • Inbound로 들어온 트래픽이 별 다른 Outbound 설정 없이 나갈 수 있음
  • NACL은 Stateless

보안 그룹의 Source

  • IP Range(CIDR)
  • 접두사 목록(Prefix List)
    • 하나 이상의 CIDR 블록의 집합
    • 보안 그룹 혹은 Route Table에서 많은 대상을 참조하기 위해 사용
    • 두 가지 종류
      • 고객 관리형: 직접 IP 주소를 생성/수정/삭제 할 수 있으며 다른 계정과도 공유 가능
      • AWS 관리형: AWS의 서비스들을 위한 IP 목록. 수정, 삭제, 업데이트가 불가능함(DynamoDB, S3, CloudFront)
    • IPv4, IPv6 둘 다 사용 가능. 단, 한 접두사 목록에 두 가지 타입을 동시에 사용 불가능
    • 생성 시점에 최대 엔트리 숫자를 지정(이후 변경 가능)
  • 다른 보안 그룹(보안 그룹 참조)

네트워크 ACL

네트워크 ACL(액세스 제어 목록)은 1개 이상의 서브넷 내부와 외부의 트래픽을 제어하기 위한 방화벽 역할을 하는 VPC를 위한 선택적 보안 계층입니다.

NACL(Network Access Control List)

  • 보안 그룹처럼 방화벽 역할을 담당
  • 서브넷 단위
    • 인스턴스 단위로 제어 불가능
    • 다양한 서브넷에 연동 가능(1:N)
  • 포트 및 아이피를 직접 Deny 가능
    • 외부 공격을 받는 상황 등 특정 아이피를 블록하고 싶을 때 사용
  • Stateless
    • 들어오는 트래픽과 나가는 트래픽을 구분하지 않음. 즉, 일반적으로 Outbound에 Ephemeral Port(임시 포트) 범위를 열어 주어야 정상적으로 통신 가능

NACL 규칙

  • 규칙 번호: 규칙에 부여되는 고유 숫자이며 규칙이 평가되는 순서(낮은 번호부터)
    • AWS 추천은 100단위 증가
  • 유형: 트래픽 유형(예: ssh=22, DNS=53, UDP=17 등)
  • 프로토콜: 통신 프로토콜(예: TCP, UDP, SMP 등)
  • 포트 범위: 허용 혹은 거부할 포트 범위
  • 소스: IP 주소의 CIDR 블록
  • 허용/거부: 허용 혹은 거부 여부

※ NACL 고려할 점

  • Stateless 방화벽이기 때문에 원할한 통신을 위해서는 Outbound도 신경을 써야함
    • 임시포트 Allow
    • Linux: 32768~61000
    • Windows: 1025~5000(XP), 49152~65535(Vista 이상부터)
  • 서브넷에서 나가거나 들어오는 트래픽에만 적용. 즉, 서브넷 내부의 트래픽에 대해서는 적용되지 않음
  • 다양한 서브넷으로 구성되어 있는 멀티티어 아키텍처라면 더 많은 고민이 필요함. 따라서 가능한 보안 그룹으로 먼저 처리 후 꼭 필요할 때 NACL 활용
  • VPC 생성 시, 혹은 AWS 계정 생성 시 주어지는 VPC에 기본 하나 제공
    • 모든 트래픽 Allow. 단, 직접 생성하는 NACL의 경우 모든 트래픽 Deny
  • 하나의 서브넷은 하나의 NACL만 연동 가능. 단, 하나의 NACL은 여러 서브넷에 연동 가능

* NACL 인바운드/아웃바운드 규칙 편집

실습 - VPC 생성

VPC 구축하기

  1. VPC 생성

    ※ VPC 등 선택 시 VPC 관련 리소스 자동 생성

  2. 서브넷 생성

    ※ 퍼블릭 서브넷 생성 시 자동 할당 IP 설정

  3. 인터넷 게이트웨이 생성 및 VPC 연결

  4. 라우팅 테이블 생성 및 서브넷 연결

    a. 퍼블릭 서브넷 라우팅 테이블 생성 및 연결

    b. 프라이빗 서브넷 라우트 테이블 연결 (기본으로 생성된 라우팅 테이블)

  5. 퍼블릭 서브넷에 EC2 프로비전

  6. 프라이빗 서브넷에 EC2 프로비전(DB용)

  7. 프라이빗 서브넷에 EC2 프로비전(WEB용)

Bastion Host를 통해 프라이빗 서브넷에 접근

  1. 퍼블릭 서브넷 EC2 연결
  2. keyfile 복사
    a. sudo -s
    b. nano keyfile.pem
    c. 키페어 복사-붙여넣기
    d. chmod 400 keypair.pem
    e. ssh -i "keyfile.pem" ec2-user@{private_주소}

NAT Gateway를 통해 프라이빗 서브넷에 접근

  1. NAT Gateway 생성
  2. 프라이빗 라우팅 테이블 편집

프라이빗 서브넷에 있는 WEB 인스턴스에 접근

  1. 퍼블릭 서브넷 EC2 연결
  2. ssh -i "keyfile.pem" ec2-user@{private_주소}
  3. sudo -s
  4. dnf install httpd -y
  5. service httpd start
  6. curl localhost
  7. exit - exit
  8. curl{private_주소}

VPC Endpoint

VPC 엔드포인트를 통해 인터넷 게이트웨이, NAT 디바이스, VPN 연결 또는 AWS Direct Connect 연결을 필요로 하지 않고 AWS PrivateLink 구동 지원 AWS 서비스 및 VPC 엔드포인트 서비스에 비공개로 연결할 수 있습니다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다. VPC와 기타 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않습니다.

VPC Endpoint

  • 외부 인터넷을 거치지 않고 AWS 서비스에 연결시켜주는 리소스
  • Interface Endpoint: ENI(Elastic Network Interface) 기반
    - Private IP를 만들어 서비스로 연결
    - 많은 서비스들을 지원(SQS, SNS, Kinesis, SageMaker 등)
    - 서비스 지정 필요
    - 보안 그룹 / 정책을 통해 보호 가능
  • Gateway Endpoint: 라우팅 테이블에서 경로의 대상으로 지정
    • S3 및 DynamoDB 지원
    • 정책 적용 가능(보안 그룹 x)
  • 상시 비용 발생

실습 - VPC 엔드포인트 생성

실습 - VPC 엔드포인트 생성: S3 Gateway Endpoint 생성

  1. S3 서비스 검색
  2. 엔드포인트를 생성할 VPC 선택
  3. 라우팅 테이블 선택

실습 - VPC 엔드포인트 생성: SQS Interface Endpoint 생성

  1. SQS 서비스 검색
  2. 엔드포인트를 생성할 VPC 선택
  3. 서브넷 선택

※ 다른 서브넷이라도 같은 가용영역이라면 엔드포인트 모두 생성

EC2 접속 방법 - 고급

Systems Manager Session Manager

실습 - SSM Session Manager를 활용한 Private EC2 연결

요구사항

  • EC2 Instance에 SSM Agent가 설치되어 있을 것(Amazon Linux에는 기본 설치)
  • EC2 AmazonEC2RoleforSSM Managed Policy가 포함된 Role이 적용돼 있을 것
  • VPC Endpoint가 해당 VPC에 있을 것
    • ssm
    • ssm-messages
    • ec2-messages
    • logs(로깅 활성화 시)
    • s3(s3 로깅 활성화 시)
  1. Amazon EC2RoleforSSM 권한을 가진 IAM 역할 생성
  2. 프라이빗 서브넷에 IAM 역할을 가진 EC2 생성
  3. 엔드포인트 생성
    a. ssm

    b. ssm-messages

    c. ec2-messages

    d. logs
  4. SSM 메뉴 선택
  5. 세션 시작

※ CloudWatch 로깅 활성화

EC2 Instance Connect Endpoint

실습 - Instance Connect Endpoint를 활용한 Private EC2 연결

요구사항

  • EIC Endpoint에 접근 가능할 것
  • 보안 그룹에 22번 포트가 열려 있을 것
  1. EC2 인스턴스 연결 엔드포인트 생성
  2. 인스턴스 연결 시 EC2 인스턴스 연결 엔드포인트를 사용하여 연결

VPC의 연결

VPC 피어링 연결

VPC 피어링 연결은 프라이빗 IPv4 주소 또는 IPv6 주소를 사용하여 두 VPC 간에 트래픽을 라우팅할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다. 동일한 네트워크에 속하는 경우와 같이 VPC의 인스턴스가 서로 통신할 수 있습니다.

VPC Peering

  • 두 개의 다른 VPC를 연결하여 VPC 안의 리소스끼리 통신이 가능하고록 설정하는 것
  • 다른 리전, 다른 계정의 VPC끼리 연결 가능
  • CIDR Range의 중첩 불가능
  • Transitive Peering 불가능
    • 통신을 위해서는 직접 연결되어 있어야 함
    • 혹은 Transit Gateway 이용
  • Peering 설정 이후 라우팅 테이블을 업데이트해서 경로 설정 필요

AWS Transit Gateway

  • 중앙 허브를 통해 VPC들과 온프레미스 네트워크를 연결하는 서비스
  • 복잡한 Peering 관계를 제거하여 간소화
  • 리전 간에는 서로 다른 Transit Gateway끼리 연결

VPN

AWS Virtual Private Network 솔루션은 온프레미스 네트워크, 원격 사무실, 클라이언트 디바이스 및 AWS 글로벌 네트워크 사이에서 보안 연결을 설정합니다.

Site-to-Site VPN

  • 데이터센터와 AWS를 연결하는 하드웨어-하드웨어 연결(1:1 연결)
  • IPSec 프로토콜 사용

Client VPN

  • AWS와 온프레미스 / AWS VPN 장비와 사용자의 PC를 연결하는 하드웨어-소프트웨어 연결(1:N 연결)

AWS Direct Connect

AWS Direct Connect 클라우드 서비스는 AWS 리소스에 대한 최단 경로입니다.

AWS Direct connect

  • AWS와 온프레미스 간에 DX Location을 경유한 전용선을 통해 연결
  • 외부 인터넷과 분리되어 있음
    • 외부에서 접근이 불가능하기 때문에 높은 보안
    • 인터넷 환경에 상관없이 일정한 속도 보장
  • Direct Connect Gateway: 여러 리전의 VPC를 한번에 Direct Connect로 연결할 수 있는 서비스
  • 성능이 좋고 빠른 대신 비싸고 설치가 오래 걸림

실습 - VPC Peering 연결하기

  1. VPC 피어링 연결 생성
  2. 라우팅 테이블 설정

VPC 설계

VPC 설계 시 고려할 점

  • VPC 간의 IP Range
    • VPC Peering을 위해서는 서로 IP Range가 겹치지 않아야 함
  • 고가용성을 위한 서브넷 및 어플리케이션 티어
    • 고가용성 - 적어도 3개 이상의 가용영역에 분산 필요 + 추가 가용영역
    • 어플리케이션 티어 - 보통 3Tier 아키텍처가 기본 _ 추가로 예비 티어
  • 서브넷 단위는 /20 or /24
    - /20: 많은 IP 숫자
    - /24: 알아보기 쉬움

참고

https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard

0개의 댓글