처음부터 안전한 AWS VPC 구축 가이드

처음부터 안전한 AWS Virtual Private Cloud(VPC)를 구축하는 방법을 알아보세요. 이 종합 가이드는 CIDR 블록, 서브넷, 라우팅 테이블과 같은 필수 개념을 다룹니다. 퍼블릭 및 프라이빗 서브넷 생성, 인터넷 게이트웨이 및 NAT 게이트웨이 구성, 최적의 네트워크 격리 및 보호를 위한 보안 그룹 및 NACL을 사용한 중요한 보안 조치 구현에 대한 단계별 지침을 확인하세요.

25 조회수

AWS VPC를 처음부터 구축하기 위한 가이드

Amazon Web Services(AWS) Virtual Private Cloud(VPC)는 클라우드에서 애플리케이션과 리소스를 배포하기 위한 기본 구성 요소입니다. VPC는 사용자가 정의한 가상 네트워크에서 AWS 리소스를 실행할 수 있는 AWS 클라우드의 논리적으로 격리된 섹션을 제공합니다. 처음부터 안전한 VPC를 구축하는 것은 무단 액세스로부터 데이터와 애플리케이션을 보호하는 데 매우 중요합니다. 이 가이드는 서브넷, 라우트 테이블 및 최적의 네트워크 분할 및 격리를 위한 중요한 보안 고려 사항과 같은 주요 구성 요소를 다루면서 새로운 VPC를 설계하고 구성하는 필수 단계를 안내합니다.

잘 설계된 VPC는 안전한 클라우드 인프라의 기반입니다. 이를 통해 네트워크 환경을 제어하고, 액세스 규칙을 정의하고, 리소스의 민감도 및 기능에 따라 리소스를 분할할 수 있습니다. VPC를 신중하게 계획하고 구현함으로써 AWS 배포의 보안 태세를 크게 향상시키고 공격 표면을 줄이며 의도하지 않은 데이터 노출을 방지할 수 있습니다. 이 가이드는 특정 요구 사항에 맞춰 강력하고 안전한 VPC를 생성하는 데 필요한 지식을 제공할 것입니다.

핵심 VPC 개념 이해하기

구성 단계에 들어가기 전에 AWS VPC의 기본 개념을 파악하는 것이 중요합니다.

  • VPC (Virtual Private Cloud): AWS 계정에 전용되는 가상 네트워크입니다. AWS 리소스를 실행할 수 있는 AWS 클라우드의 논리적으로 격리된 섹션입니다.
  • 서브넷 (Subnet): VPC 내의 IP 주소 범위입니다. 사용자가 생성한 서브넷에 AWS 리소스를 실행할 수 있습니다. 서브넷은 VPC의 CIDR 블록의 하위 집합인 CIDR 블록으로 정의됩니다.
  • 라우트 테이블 (Route Table): 서브넷 또는 게이트웨이에서 발생하는 네트워크 트래픽의 대상을 결정하는 데 사용되는 경로(route)라는 규칙 집합입니다.
  • 인터넷 게이트웨이 (IGW): VPC와 인터넷 간의 통신을 허용하는 VPC 구성 요소입니다. VPC 내의 인스턴스가 인터넷에 연결하고 그 반대 방향으로도 연결할 수 있도록 합니다.
  • NAT 게이트웨이 (Network Address Translation): 사설 서브넷의 인스턴스가 인터넷에서 시작된 인바운드 연결을 방지하면서 인터넷 액세스를 허용하는 고가용성 및 확장 가능한 NAT 서비스입니다.
  • 보안 그룹 (Security Group): 인스턴스의 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 인스턴스 수준에서 작동합니다.
  • 네트워크 액세스 제어 목록 (NACL): 하나 이상의 서브넷으로 들어오고 나가는 트래픽을 제어하는 방화벽 역할을 하는 VPC에 대한 선택적 보안 계층입니다. 서브넷 수준에서 작동합니다.

단계별 VPC 생성

이제 안전한 VPC 구축을 시작해 보겠습니다.

1. IP 주소 체계 계획하기

첫 번째이자 가장 중요한 단계는 VPC 및 해당 서브넷에 대한 IP 주소 범위를 계획하는 것입니다. 여기에는 VPC에 대한 클래스 없는 도메인 간 라우팅(CIDR) 블록을 선택하는 작업이 포함됩니다.

  • VPC CIDR 블록: 온프레미스 네트워크 또는 VPN이나 Direct Connect를 통해 연결할 수 있는 다른 AWS VPC와 겹치지 않는 사설 IP 주소 범위를 선택합니다. AWS는 RFC 1918 IP 주소 범위(10.0.0.0/8, 172.16.0.0/12 또는 192.168.0.0/16)를 사용할 것을 권장합니다. CIDR 블록은 /16(65,536개 IP 주소)부터 /28(16개 IP 주소)까지 가능합니다.

    • 예시: 10.0.0.0/16은 VPC에 대해 큰 주소 공간을 제공합니다.
  • 서브넷 CIDR 블록: VPC의 CIDR 블록을 서브넷에 맞게 더 작은 CIDR 블록으로 나눕니다. 각 서브넷의 CIDR 블록이 VPC CIDR 블록의 하위 집합이며 다른 서브넷과 겹치지 않는지 확인합니다.

    • 예시(VPC가 10.0.0.0/16인 경우):
      • 퍼블릭 서브넷 1: 10.0.1.0/24
      • 퍼블릭 서브넷 2: 10.0.2.0/24
      • 프라이빗 서브넷 1: 10.0.10.0/24
      • 프라이빗 서브넷 2: 10.0.11.0/24

2. VPC 생성

AWS 관리 콘솔에서 VPC 대시보드로 이동하여 새 VPC를 생성합니다.

  1. VPC 대시보드 > 내 VPC > VPC 생성으로 이동합니다.
  2. 이름 태그: VPC에 설명적인 이름(예: MySecureVPC)을 지정합니다.
  3. IPv4 CIDR 블록: 계획한 CIDR 블록(예: 10.0.0.0/16)을 입력합니다.
  4. IPv6 CIDR 블록: 필요한 경우 IPv6 CIDR 블록 활성화를 선택할 수 있습니다.
  5. 테넌시: 대부분의 사용 사례에서는 기본값(Default)이 적합합니다. 전용(Dedicated)은 더 높은 비용으로 하드웨어 격리를 제공합니다.
  6. VPC 생성을 클릭합니다.

3. 서브넷 생성

이제 VPC 내에 퍼블릭 및 프라이빗 서브넷을 생성합니다.

  1. VPC 대시보드 > 서브넷 > 서브넷 생성으로 이동합니다.
  2. VPC ID: 방금 생성한 VPC를 선택합니다.
  3. 서브넷 이름: 이름(예: MyPublicSubnet-AZ1)을 지정합니다.
  4. 가용 영역: 가용 영역(AZ)을 선택합니다. 고가용성을 위해 리소스를 여러 AZ에 배포하는 것이 좋습니다.
  5. IPv4 CIDR 블록: 이 서브넷의 CIDR 블록(예: 10.0.1.0/24)을 입력합니다.
  6. 서브넷 생성을 클릭합니다.

이 프로세스를 반복하여 계획된 모든 퍼블릭 및 프라이빗 서브넷을 생성하고 복원력을 위해 다른 가용 영역에 배치되었는지 확인합니다.

4. 인터넷 게이트웨이(IGW) 생성

퍼블릭 서브넷이 인터넷에 액세스하려면 IGW가 필요합니다.

  1. VPC 대시보드 > 인터넷 게이트웨이 > 인터넷 게이트웨이 생성으로 이동합니다.
  2. 이름 태그: MyVPCInternetGateway.
  3. 인터넷 게이트웨이 생성을 클릭합니다.
  4. 생성 후 IGW를 선택하고 작업을 클릭한 다음 VPC에 연결을 선택합니다. VPC를 선택하고 인터넷 게이트웨이 연결을 클릭합니다.

5. 라우트 테이블 생성

라우트 테이블은 VPC 내에서 트래픽을 지시합니다. 일반적으로 퍼블릭 서브넷용 하나와 프라이빗 서브넷용 하나, 최소한 두 개가 필요합니다.

a. 퍼블릭 라우트 테이블:

  1. VPC 대시보드 > 라우트 테이블 > 라우트 테이블 생성으로 이동합니다.
  2. 이름 태그: MyPublicRouteTable.
  3. VPC: VPC를 선택합니다.
  4. 라우트 테이블 생성을 클릭합니다.
  5. 새로 생성된 MyPublicRouteTable을 선택합니다.
  6. 경로 탭 아래에서 경로 편집을 클릭합니다.
  7. 경로 추가를 클릭합니다.
  8. 대상: 0.0.0.0/0(모든 IPv4 트래픽).
  9. 대상: 인터넷 게이트웨이를 선택하고 IGW를 선택합니다.
  10. 경로 저장을 클릭합니다.
  11. 서브넷 연결: 서브넷 연결 탭으로 이동하여 서브넷 연결 편집을 클릭하고 퍼블릭 서브넷을 이 라우트 테이블과 연결합니다.

b. 프라이빗 라우트 테이블 (NAT 게이트웨이 사용):

프라이빗 서브넷의 인스턴스가 인터넷에서 직접 액세스되지는 않으면서 인터넷에 대한 아웃바운드 연결(예: 소프트웨어 업데이트용)을 허용하려면 NAT 게이트웨이를 사용합니다.

  1. NAT 게이트웨이 생성:

    • VPC 대시보드 > NAT 게이트웨이 > NAT 게이트웨이 생성으로 이동합니다.
    • 이름: MyNATGateway.
    • 서브넷: 퍼블릭 서브넷 중 하나를 선택합니다.
    • 연결 유형: 퍼블릭.
    • Elastic IP 할당 ID: Elastic IP 할당을 클릭하여 새 Elastic IP 주소를 생성하고 할당합니다.
    • NAT 게이트웨이 생성을 클릭합니다.
    • 참고: NAT 게이트웨이는 비용이 발생합니다. 기본 아웃바운드 연결의 경우 NAT 게이트웨이에 사용할 충분한 IP 주소가 있는지 확인하십시오..
  2. 프라이빗 라우트 테이블 생성:

    • VPC 대시보드 > 라우트 테이블 > 라우트 테이블 생성으로 이동합니다.
    • 이름 태그: MyPrivateRouteTable.
    • VPC: VPC를 선택합니다.
    • 라우트 테이블 생성을 클릭합니다.
    • MyPrivateRouteTable을 선택합니다.
    • 경로 탭 아래에서 경로 편집을 클릭합니다.
    • 경로 추가를 클릭합니다.
    • 대상: 0.0.0.0/0.
    • 대상: NAT 게이트웨이를 선택하고 NAT 게이트웨이를 선택합니다.
    • 경로 저장을 클릭합니다.
    • 서브넷 연결: 서브넷 연결 탭으로 이동하여 서브넷 연결 편집을 클릭하고 프라이빗 서브넷을 이 라우트 테이블과 연결합니다.

6. 보안 그룹 구성

보안 그룹은 인스턴스 수준에서 상태 저장 방화벽 역할을 합니다. 정의한 규칙에 따라 트래픽을 허용하거나 거부합니다.

  • 모범 사례: 서로 다른 유형의 리소스(예: 웹 서버, 데이터베이스 서버, 애플리케이션 서버)에 대해 특정 보안 그룹을 생성합니다. 지나치게 허용적인 규칙을 사용하는 것을 피하십시오.

예시: 웹 서버 보안 그룹 (WebServerSG)

  1. VPC 대시보드 > 보안 그룹 > 보안 그룹 생성으로 이동합니다.
  2. 보안 그룹 이름: WebServerSG.
  3. 설명: HTTP 및 HTTPS 액세스 허용.
  4. VPC: VPC를 선택합니다.
  5. 인바운드 규칙:
    • 유형: HTTP, 프로토콜: TCP, 포트 범위: 80, 소스: 0.0.0.0/0(또는 더 구체적인 신뢰할 수 있는 IP 범위).
    • 유형: HTTPS, 프로토콜: TCP, 포트 범위: 443, 소스: 0.0.0.0/0(또는 더 구체적인 신뢰할 수 있는 IP 범위).
    • (선택 사항) 유형: SSH, 프로토콜: TCP, 포트 범위: 22, 소스: 사용자 신뢰 IP 주소/범위(관리 목적으로 중요).
  6. 아웃바운드 규칙: 기본적으로 모든 아웃바운드 트래픽(0.0.0.0/0)을 허용합니다. 필요한 경우 이 규칙을 제한할 수 있습니다.
  7. 보안 그룹 생성을 클릭합니다.

예시: 데이터베이스 서버 보안 그룹 (DatabaseSG)

  1. DatabaseSG라는 새 보안 그룹을 생성합니다.
  2. 인바운드 규칙:
    • 데이터베이스의 기본 포트(예: MySQL의 경우 3306, PostgreSQL의 경우 5432)에 대한 트래픽을 애플리케이션 서버의 보안 그룹(예: WebServerSG 또는 AppServerSG)에서만 허용하는 규칙을 추가합니다.
    • 소스: 사용자 지정을 선택한 다음 애플리케이션 서버 보안 그룹의 ID를 입력합니다.
  3. 아웃바운드 규칙: 일반적으로 모든 아웃바운드 트래픽을 허용합니다.

7. 네트워크 액세스 제어 목록(NACL) 구성

NACL은 서브넷 수준에서 작동하는 상태 비저장 방화벽입니다. 추가적인 방어 계층 역할을 합니다.

  • 상태 저장 대 상태 비저장: 보안 그룹은 상태 저장입니다(인바운드 트래픽을 허용하면 아웃바운드 응답은 자동으로 허용됨). NACL은 상태 비저장입니다(인바운드 및 아웃바운드 트래픽에 대한 규칙을 명시적으로 정의해야 함).

  • 모범 사례: 특정 서브넷 수준 액세스 제어가 필요한 경우가 아니면 NACL은 기본 구성으로 유지되는 경우가 많습니다. 관리하기 복잡할 수 있습니다.

NACL을 사용해야 하는 경우:

  1. VPC 대시보드 > 네트워크 ACL > 네트워크 ACL 생성으로 이동합니다.
  2. 이름 태그: MyNacl.
  3. VPC: VPC를 선택합니다.
  4. 네트워크 ACL 생성을 클릭합니다.
  5. NACL을 선택하고 인바운드 규칙 아래에 규칙을 추가합니다.
  6. 규칙 번호: NACL은 가장 낮은 번호의 규칙부터 순서대로 규칙을 평가합니다. 향후 규칙 삽입을 위해 100, 200, 300 등과 같은 번호를 사용합니다.
  7. 허용/거부: 트래픽을 허용할지 거부할지 지정합니다.
  8. 프로토콜, 포트 범위, 소스/대상: 트래픽 매개변수를 정의합니다.
  9. 해당 아웃바운드 규칙을 구성해야 합니다.
  10. 서브넷 연결 탭으로 이동하여 NACL을 서브넷과 연결합니다.

배포 시나리오 예시

일반적인 웹 애플리케이션을 고려해 보겠습니다.

  • VPC: 10.0.0.0/16
  • 퍼블릭 서브넷 1 (us-east-1a): 10.0.1.0/24 (MyPublicRouteTable 및 IGW와 연결됨)
  • 퍼블릭 서브넷 2 (us-east-1b): 10.0.2.0/24 (MyPublicRouteTable 및 IGW와 연결됨)
  • 프라이빗 서브넷 1 (us-east-1a): 10.0.10.0/24 (MyPrivateRouteTable 및 NAT 게이트웨이와 연결됨)
  • 프라이빗 서브넷 2 (us-east-1b): 10.0.11.0/24 (MyPrivateRouteTable 및 NAT 게이트웨이와 연결됨)

  • 인터넷 게이트웨이: VPC에 연결됨.

  • NAT 게이트웨이: Elastic IP를 사용하여 퍼블릭 서브넷 1에 배포됨.
  • 퍼블릭 라우트 테이블: 0.0.0.0/0을 IGW로 지시합니다. 퍼블릭 서브넷과 연결됨.
  • 프라이빗 라우트 테이블: 0.0.0.0/0을 NAT 게이트웨이로 지시합니다. 프라이빗 서브넷과 연결됨.

  • 로드 밸런서용 보안 그룹 (퍼블릭 서브넷 내): 0.0.0.0/0에서 HTTP/HTTPS 허용.

  • 웹 서버용 보안 그룹 (프라이빗 서브넷 내): 로드 밸런서 SG에서 HTTP/HTTPS 허용, 사용자 신뢰 IP에서 SSH 허용.
  • 데이터베이스용 보안 그룹 (프라이빗 서브넷 내): 웹 서버 SG에서 MySQL/PostgreSQL 허용.

중요한 보안 고려 사항

  • 최소 권한 원칙: 보안 그룹 및 NACL에 필요한 권한만 부여합니다. 소스 IP 주소를 가능한 한 제한합니다.
  • 여러 가용 영역 사용: 고가용성 및 재해 복구를 위해 서브넷과 리소스를 여러 AZ에 분산합니다. 이는 서로 다른 AZ에 서브넷을 생성하고 적절한 라우트 테이블과 연결하여 달성됩니다.
  • 보안 그룹 및 NACL 정기 검토: 애플리케이션이 발전함에 따라 보안 규칙도 발전해야 합니다. 주기적으로 검토하고 업데이트하십시오.
  • 민감한 리소스에 퍼블릭 서브넷 사용 피하기: 데이터베이스, 애플리케이션 서버 및 기타 민감한 리소스는 프라이빗 서브넷에 있어야 합니다. 직접적인 인터넷 액세스가 필요한 리소스(예: 로드 밸런서 또는 배스천 호스트)만 퍼블릭 서브넷에 있어야 합니다.
  • 배스천 호스트 고려: 프라이빗 서브넷의 인스턴스에 SSH로 액세스해야 하는 경우 퍼블릭 서브넷에 강화된 배스천 호스트를 사용하는 것을 고려하십시오. 배스천 호스트에 대한 SSH 액세스를 알려진 IP 주소로 제한합니다.
  • VPC 흐름 로그: VPC의 네트워크 인터페이스와 주고받는 IP 트래픽에 대한 정보를 캡처하기 위해 VPC 흐름 로그를 활성화합니다. 이는 보안 모니터링 및 문제 해결에 매우 유용합니다.
  • 네트워크 분할: 서로 다른 VPC와 서브넷을 사용하여 환경(예: 개발, 스테이징, 프로덕션) 및 애플리케이션의 서로 다른 계층을 분할합니다.

결론

AWS VPC를 처음부터 안전하게 구축하는 과정에는 핵심 구성 요소에 대한 신중한 계획과 구성이 포함됩니다. CIDR 블록, 서브넷, 라우트 테이블을 이해하고 보안 그룹 및 NACL을 효과적으로 활용함으로써 AWS 리소스를 위한 강력하고 격리된 네트워크 환경을 구축할 수 있습니다. 보안은 지속적인 프로세스이므로 안전한 클라우드 인프라를 유지하려면 지속적인 모니터링, 검토 및 모범 사례 준수가 가장 중요합니다.