AWS - VPC

이eun·2024년 12월 24일

VPC란

사용자에게 AWS 전용 가상 네트워크를 만들어주는 서비스

  • 서브넷 : VPC의 IP 주소 범위, AZ에 종속적임
  • 라우팅 테이블 : 네트워크 트래픽을 전달할 위치를 결정하는 데 사용되는 라우팅이라는 규칙 집합
  • 인터넷 게이트웨이 : VPC의 리소스와 인터넷 간의 통신을 활성화하기 위해 VPC에 연결하는 게이트웨이, VPC에 종속적임
  • NAT 게이트웨이 : 네트워크 주소 변환을 통해 프라이빗 서브넷에서 인터넷 또는 기타 AWS 서비스에 연결하는 게이트웨이
  • 시큐리티 그룹 : 보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 하는 규칙 집합
  • VPC 엔드포인트 : 인터넷 게이트웨이, NAT 디브이스, VPN 연결 또는 AWS Direct Connect 연결을 필요로 하지 않고 Private Link 구동 지원 AWS 서비스 및 VPC 엔드포인트 서비스에 VPC를 비공개로 연결할 수 있다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP주소를 필요로 하지 않는다. VPC와 기타 서비스 간의 트래픽은 Amazon 네트워크를 벗어나지 않는다.

여기서 인터넷 게이트웨이와 NAT 게이트 웨이의 차이가 뭐냐고 물으신다면 프라이빗 서브넷 개념이 이 두가지를 나누는 개념이다. 프라이빗 서브넷에 반대되는 개념이 퍼블릭 서브넷이다. 서브넷과 라우팅 테이블이 연결되는 구조인데 그 라우팅 테이블에 외부로 나가는 인터넷으로 나가는 서비스가 인터넷 게이트웨이를 통한다면 퍼블릭 서브넷이라고 부른다. 반면, NAT 게이트웨이를 통하면 프라이빗 서브넷이라고 부른다. 인스턴스에 공인 IP가 붙어있으면 퍼블릭 서브넷이고 공인 IP를 가지고 있지만 NAT게이트웨이를 통해서 인터넷을 할 수 있는 서브넷은 프라이빗 서브넷이라고 부른다.

VPC 엔드포인트는 VPC에 종속되어있는 VPC 내부에서 여러 AWS 서비스 간에 인터넷 게이트웨이나 NAT를 통하지 않고 바로 AWS 서비스를 사용할 수 있는 서비스이다. 굳이 인터넷을 통하지 않고 AWS 내부 전용선을 통해서 가는 서비스를 의미한다. 그래서 퍼블릭 IP 주소가 필요 없다. 대표적으로 S3 가 있다.

IGW vs Nat Gateway

IGW와 Nat GW 연결에 따라서, public subnet, private subnet이 결정된다.
인터넷 게이트웨이는 vpc리소스와 인터넷과의 통신을 해줌
nat 게이트웨이는 네트워크 주소 변환을 통해서 프라이빗 서브넷에 위치한 애가 인터넷을 하려고 할 때 nat 게이트웨이를 통해서 인터넷을 하게 해주는 그런 서비스이다.

퍼블릿 서브넷의 인스턴스는 인터넷에 바로 아웃바운드 트래픽을 전송할 수 있는 반면, 프라이빗 서브넷의 인스턴스는 그렇게 할 수 없다. 프라이빗 서브넷에 있는 NAT 게이트웨이를 사용하여 인터넷에 접근할 수 있다.

특징점 :
퍼블릭 서브넷은 각각의 서버들이 자신의 고유한 퍼블릭 IP을 가지고 있음. 즉, 외부에서 공인 IP를 통해 접근이 가능하다.
프라이빗 서브넷에 있는 서버들은 같은 nat 게이트웨이면 모든 아웃바운드 IP가 똑같다. 즉, 해당 서버들이 가지고 있는 Elastic IP를 통해서 나가서 인터넷 게이트웨이를 통하게 된다. 프라이빗 서브넷의 경우, 고유 주소를 가지고 있지 않기 때문에 외부에서 접근이 불가능하다. 데이터베이스나 웹서버들 같은 경우, 대부분 프라이빗 서브넷에 생성을 한다.

주의 : nat 테이블은 시간 과금이기 때문에 비용이 굉장히 많이 나올 수 있음

Route Table

Route Table은 트래픽을 규칙에 맞게 전달해주기 위해 필요한 일종의 테이블이다. 여러 서브넷에서 동시에 사용할 수 있으며, 연결하는 작업(종속적인 관계)은 association이라고 한다.

퍼블릭 라우팅테이블에는 퍼블릿 서브넷을 연결해야하며, 프라이빗 라우팅테이블에는 프라이빗 서브넷을 연결해야 한다.

VPC에 종속되어있다.
availability zone이 n개면 n개의 public subnet에 해당하는 routing table을 만든다.
a zone에 해당하는 라우팅 테이블을 연결하고
b zone에 해당하는 라우팅 테이블을 연결해야만 한다.
같은 zone 내에선 트래픽 비용이 나가지 않지만 다른 zone 끼리의 상호작용에서는 비용이 나가기 때문이다.
또한, 대용량 트래픽과 latency의 문제가 생기는 것을 최소화해야 한다.
비용을 최소화하기 위해서는 하나의 nat gateway를 사용하는 것이 좋지만, 대용량의 트래픽과 latency를 감당하기 위해서는 zone마다 nat gateway를 생성하는 것이 좋다.

vim 편집기 단축키

  • esc + u : 돌아가기

bastion

시큐리티 그룹 만드는 거를 의미함. 또한 SSH 포트를 이용하는 거이다.

Bastion Host
의미: 외부 네트워크(인터넷)와 내부 네트워크 간의 보안 게이트웨이 역할을 하는 서버.
목적: 내부 네트워크를 보호하면서, 외부에서 내부 네트워크에 접근할 수 있는 안전한 지점 제공.
주요 역할:
관리자가 내부 네트워크의 서버에 접근하기 위해 사용하는 중간점.
외부로부터의 직접적인 공격을 차단하며, 인증된 사용자만 내부에 접근 가능하도록 제한.

Bastion Host의 주요 특징

  • 보안 강화:
    제한된 포트만 열려 있으며, 강력한 인증 메커니즘 사용.
    주로 SSH(보안 셸) 프로토콜로 접근.
  • 독립성:
    최소한의 소프트웨어만 설치하여 공격 표면을 최소화.
    다른 서비스와 분리하여 단일 보안 역할만 수행.
  • 로그 및 모니터링:
    모든 연결 및 활동을 기록하여 모니터링과 감사(Audit)에 활용.

사용 사례

(1) 클라우드 환경
AWS, GCP, Azure 같은 클라우드 제공자는 Bastion Host를 안전한 원격 관리 도구로 사용.
예를 들어, AWS에서 관리자는 Bastion Host를 통해 퍼블릭 서브넷에서 SSH 접속 후, 프라이빗 서브넷에 있는 EC2 인스턴스에 접근.

(2) 네트워크 분리 환경
민감한 데이터가 저장된 네트워크와 외부 네트워크를 분리하기 위해 Bastion Host를 사용.

(3) 기업 내부 관리
원격 관리 및 내부 시스템 접근 시 보안 계층 추가.

Bastion의 장점

  • 보안 강화: 외부 공격으로부터 네트워크를 보호.
  • 통제 가능: 내부 네트워크로의 접근 경로를 중앙 집중적으로 관리.
  • 감사 가능: 모든 접근과 활동을 로깅하여 이상 징후를 확인 가능.

Bastion Host 설계 시 주의점

  • 강력한 인증 방식(예: SSH 키 페어, MFA) 사용.
  • 접근 권한을 최소화하여 원격 관리 전용으로 사용.
  • 최신 보안 패치를 적용하여 취약점 제거.
  • 불필요한 서비스 및 포트는 비활성화.

outputs

테라폼 state에 저장되는 변수들이다.

multi vpc의 주요 특징

1. 독립적인 네트워크 격리

각 VPC는 기본적으로 서로 격리되어 있습니다.
독립적인 서브넷, 라우팅 테이블, 게이트웨이를 설정할 수 있어 보안과 네트워크 관리가 용이합니다.

2. 확장성과 유연성

서로 다른 팀, 프로젝트, 애플리케이션에 대해 개별 VPC를 생성하여 관리할 수 있습니다.
필요에 따라 VPC를 추가하거나 수정하기 쉬워 확장성이 높습니다.

3. 상호 연결

필요한 경우, VPC 간 통신을 설정할 수 있습니다. (예: VPC Peering, Transit Gateway 사용)

4. 보안 강화

각 VPC에 별도의 보안 그룹 및 네트워크 ACL을 적용하여 강력한 보안 경계를 유지합니다.

VPC Endpoint

VPC에서 리소스와 직접 통신하기 위한 VPC Endpoint 생성
AWS 전용선을 통해서 연결되는 형태

VPC Endpoint의 역할

  • VPC Endpoint는 다른 AWS 서비스를 사용할 때 AWS 내부망을 사용하여 내부 통신을 하고자 할 때 사용합니다.
  • VPC Endpoint를 사용하면 인터넷을 타고 나가지 않기 때문에 외부로부터 통신을 안전하게 보호할 수 있고, 내부망을 타기 때문에 속도가 향상될 수 있습니다.

Gateway형 Endpoint

  • 인터넷으로 API통신을 하는 S3와 DynamoDB는 Gateway형으로 Endpoint가 생성됩니다.
  • Gateway형 Endpoint는 따로 보안 그룹을 생성할 필요가 없습니다.

Interface형 Endpoint

  • 기타 서비스들은 Interface형으로 Endpoint를 생성할 수 있습니다.
  • AWS PrivateLink에 의해 제공됩니다.
  • 트래핑 라우팅 : VPC 내에서 ENI(Elastic Network Interface)를 생성하여 서비스로 향하는 트래픽의 진입점 역할을 합니다.
  • Interface형 Endpoint는 별도로 보안 그룹이 필요합니다.
  • 보안그룹은 기본적으로 443포트 인바운드를 허용해주면 됩니다.
  • ex) API gateway or secret manager 서비스가 있다.
  • API gateway란 가장 앞단에서 어떠한 룰에 의해서 IP를 분리하는 라우트 역할을 해주고 ALB와 비슷한 역할을 해주는 데 조금 더 고도화되어 있는 서비스이다.
  • Secret manager는 어떤 시크릿 값을 키-밸류 형태로 가지고 있는 데, KMS를 통해 암호화할 수 있다.

VPC Peering

VPC 간 통신을 위한 peering 작업, 내부 통신
과거에는 같은 리전에서만 vpc 피어링이 가능했지만 현재, Inter-Region VPC Peering이라고 AWS Region끼리도 이제 Peering을 맺을 수 있다.

VPC 간 통신

  • VPC 간 내부 통신을 위해서는 Peering

  • 단, 주의해야할 점은 peering하는 두 VPC의 CIDR이 겹치지 않아야 한다.

  • 같은 존이라면 과금이 되지 않는다. 하지만, transit gateway는 존에 상관없이 무조건 네트워크 비용이 과금된다.

  • VPC Peering이 선행되어야만 security group을 연결해서 통신할 수 있다.

  • 1:1 통신이 아니라 멀티리전, 멀티 VPC 어카운트까지 되면 보통 수십 개의 VPC를 연결하게 되는 경우가 많다.

  • VPC Peering을 맺기 위해서는 Requester는 Peering을 요청하고, Acceptor는 요청을 승인해야 한다. 이후에는 해당 Peering ID를 destination IP range와 Route테이블에 저장한다.

    • Requester: artd VPC
    • Acceptor: arts VPC

    Requester는 Peering을 가장 많이 맺는 VPC로 정하면 편리하다
    Acceptor에서 수락을 하면 연결이 완료된다. 단, 이게 끝이 아님. 길을 만들어 준거지 통신을 하게 허락해준 건 아님. 커넥션을 하려면 라우팅 테이블에 다 추가를 해줘야 한다.

Requester 생성

먼저 peering.tf 파일을 생성(수정)해서 peering request 코드를 작성한다. Peering request는 어느 계정에서 해도 상관없짐나, 관리의 편의성을 위해서 peering connection이 많은 VPC를 기준으로 설계하면 좋다.

참고 : https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_peering_connection

setproduct 함수

여러 세트의 문자열이나 객체에서 가능한 조합을 생성하는 강력한 도구이다. 이 함수는 두 개 이상의 리스트를 입력으로 받아 각 입력 리스트에서 하나의 요소를 조합한 가능한 모든 조합의 리스트를 생성한다.
'setproduct'함수는 Terraform 모듈에서 리소스를 구성하는 변수의 조합을 더 동적이고 유연하게 생성할 수 있게 해주어, 보다 유연한 인프라 구성을 가능하게 한다.

setproduct(set1, set2, ...)

  • 'set1', 'set2'는 조합하고자 하는 요소들의 리스트나 세트이다. (문자열, 숫자 또는 다른 타입도 가능), 두 개 이상의 세트를 인자로 제공할 수 있다.

  • 주어진 세트들의 카테시안 곱을 계산한다. 이는 첫 번째 세트의 각 요소를 두 번째 세트의 각 요소와 결합하고, 추가적으로 제공된 세트에 대해서도 이 과정을 반복하여 모든 가능한 조합을 생성한다는 의미이다.

  • 결과는 튜플의 리스트이며, 각 튜플에는 입력 세트의 각 요소가 함수에 제공된 순서대로 포함된다.

  • 사례 :

    • 클라우드 리소스에 대한 다양한 변수의 조합을 생성하여 복잡한 배포를 더 쉽게 관리할 수 있다.
    • 다양한 시나리토 테스트 입력의 조합을 생성하여 광범위한 테스트 커버리지를 보장하는 데 도움을 줄 수 있다.
    • 동적 블록 생성 : 다양한 구성으로 리소스나 모듈의 여러 인스턴스를 생성해야 할 수 있다.

0개의 댓글