사용자 지정 VPC 내에서 EC2 인스턴스를 안전하게 시작하는 방법

퍼블릭 및 프라이빗 서브넷, 라우팅 테이블, 보안 그룹, 안전한 액세스 경로를 사용하여 사용자 지정 VPC에서 EC2를 시작합니다.

사용자 지정 VPC 내에서 EC2 인스턴스를 안전하게 시작하는 방법

기본 VPC에서 Amazon EC2 인스턴스를 시작하는 것은 빠르지만, 프로덕션이나 스테이징 환경에 필요한 제어 수준을 제공하지 못하는 경우가 많습니다. 사용자 지정 VPC를 사용하면 주소 범위를 선택하고, 퍼블릭 및 프라이빗 서브넷을 분할하며, 인터넷에 도달하는 경로를 정확히 결정할 수 있습니다.

이 가이드에서는 실용적인 보안 레이아웃을 보여줍니다: 로드 밸런서 또는 배스천 호스트용 퍼블릭 서브넷, 애플리케이션 인스턴스용 프라이빗 서브넷, 이러한 역할에 맞는 라우팅 테이블, 그리고 필요한 트래픽만 허용하는 보안 그룹입니다.

보안 VPC의 핵심 구성 요소 이해

Virtual Private Cloud(VPC)는 모든 보안 AWS 네트워킹이 구축되는 기반입니다. 인스턴스를 시작하기 전에 다음 구성 요소가 올바르게 구성되었는지 확인해야 합니다.

  1. VPC: 네트워크의 기본 컨테이너로, 개인 IP 주소 범위(CIDR 블록)를 정의합니다.
  2. 서브넷: VPC 내의 분할 영역으로, 퍼블릭(인터넷에 직접 액세스 가능) 또는 프라이빗(격리됨)으로 분류됩니다.
  3. 인터넷 게이트웨이(IGW): 퍼블릭 서브넷의 리소스가 인터넷과 통신하는 데 필요합니다.
  4. 라우팅 테이블: 서브넷의 네트워크 트래픽이 전달되는 방식을 결정하는 규칙입니다.
  5. 보안 그룹(SG): 인스턴스 수준에서 인바운드 및 아웃바운드 트래픽을 제어하는 상태 저장 방화벽입니다.

1단계: 사용자 지정 VPC 및 서브넷 생성

네트워크 엔클로저를 만들고 기능 영역으로 분할하는 것으로 시작합니다. 표준 설정의 경우 최소한 하나의 퍼블릭 서브넷과 하나의 프라이빗 서브넷을 권장합니다.

1.1 VPC 생성

VPC를 생성할 때 나중에 연결할 수 있는 온프레미스 네트워크(예: AWS VPN 또는 Direct Connect 사용)와 겹치지 않는 개인 CIDR 블록을 선택합니다.

예시 VPC CIDR: 10.0.0.0/16

1.2 서브넷 생성

각 서브넷은 하나의 가용 영역(AZ)에 있습니다. 프로덕션 VPC는 일반적으로 두 개 이상의 AZ에 걸쳐 일치하는 퍼블릭 및 프라이빗 서브넷을 사용하지만, 이 예제에서는 us-east-1a에 하나의 퍼블릭 서브넷과 하나의 프라이빗 서브넷으로 레이아웃을 작게 유지합니다.

  • 퍼블릭 서브넷: 10.0.1.0/24 (배스천 호스트 또는 로드 밸런서에 사용)
  • 프라이빗 서브넷: 10.0.2.0/24 (애플리케이션 서버 및 데이터베이스에 사용)

2단계: 인터넷 연결 및 라우팅 구성

프라이빗 서브넷의 리소스는 인터넷에 직접 액세스할 수 없어야 합니다. 퍼블릭 서브넷의 리소스는 인터넷 게이트웨이(IGW)를 통해 인터넷에 도달할 수 있도록 올바르게 라우팅되어야 합니다.

2.1 인터넷 게이트웨이(IGW) 연결

  1. AWS 콘솔에서 IGW 리소스를 생성합니다.
  2. 이 IGW를 새로 생성한 VPC에 연결합니다.

2.2 라우팅 테이블 구성

라우팅 테이블은 트래픽 경로를 정의합니다. 최소한 두 개가 필요합니다: 퍼블릭 서브넷용 하나와 프라이빗 서브넷용 하나입니다.

퍼블릭 라우팅 테이블

이 테이블은 모든 비로컬 트래픽(0.0.0.0/0)을 연결된 인터넷 게이트웨이로 전달합니다.

대상 대상
10.0.0.0/16 (VPC CIDR) local
0.0.0.0/0 igw-xxxxxxxx (IGW ID)

이 라우팅 테이블을 퍼블릭 서브넷(10.0.1.0/24)과 연결합니다.

프라이빗 라우팅 테이블

이 테이블은 내부 통신만 허용합니다. 중요한 점은 IGW를 가리키는 경로가 없어야 한다는 것입니다.

대상 대상
10.0.0.0/16 (VPC CIDR) local

이 라우팅 테이블을 프라이빗 서브넷(10.0.2.0/24)과 연결합니다.

모범 사례: 프라이빗 서브넷의 리소스가 패치나 업데이트를 다운로드해야 하는 경우 퍼블릭 서브넷에 배치된 NAT 게이트웨이를 사용해야 합니다. 그러면 프라이빗 라우팅 테이블은 0.0.0.0/0 트래픽을 IGW 대신 NAT 게이트웨이로 보냅니다.

3단계: 엄격한 보안 그룹 규칙 정의

보안 그룹(SG)은 EC2 인스턴스용 가상 방화벽 역할을 합니다. 인스턴스 수준에서 작동하며 상태 저장(반환 트래픽이 자동으로 허용됨)입니다.

보안 설정을 위해서는 최소 권한 원칙을 준수하여 필요한 인바운드 트래픽만 명시적으로 허용해야 합니다.

웹 서버용 보안 그룹 예시(프라이빗 서브넷)

이 EC2 인스턴스가 퍼블릭 서브넷에 있는 애플리케이션 로드 밸런서(ALB)에서만 액세스할 수 있는 애플리케이션 서버인 경우 규칙은 매우 제한적이어야 합니다.

인바운드 규칙

유형 프로토콜 포트 범위 소스
HTTP TCP 80 ALB의 SG ID
HTTPS TCP 443 ALB의 SG ID
SSH TCP 22 회사 네트워크 IP 범위 또는 배스천 호스트 SG ID

아웃바운드 규칙

기본적으로 아웃바운드 트래픽은 일반적으로 모든 대상(0.0.0.0/0)에 허용됩니다. 필요한 경우 이를 더 제한할 수 있습니다(예: RDS 인스턴스 SG에 대한 연결만 허용).

보안 팁: 공개된 보안 그룹의 포트 22(SSH) 또는 포트 3389(RDP)에 0.0.0.0/0을 절대 할당하지 마십시오. 항상 관리 액세스를 알려진 내부 IP 범위로 제한하십시오.

4단계: EC2 인스턴스를 안전하게 시작

인스턴스를 시작할 때 위에서 설정한 올바른 네트워크 구성 요소에 매핑해야 합니다.

  1. AMI 및 인스턴스 유형 선택: 원하는 Amazon Machine Image(AMI) 및 하드웨어 사양을 선택합니다.
  2. 네트워크 설정: '인스턴스 세부 정보 구성' 단계에서:
    • 네트워크: 사용자 지정 VPC를 선택합니다.
    • 서브넷: 인터넷에 직접 노출되지 않아야 하는 애플리케이션 서버를 시작하는 경우 프라이빗 서브넷(10.0.2.0/24)을 선택합니다.
    • 퍼블릭 IP 자동 할당: 프라이빗 서브넷에 시작하는 경우 비활성화되어 있는지 확인합니다. (퍼블릭 서브넷을 선택하는 경우 배스천 호스트와 같이 직접 공용 액세스가 필요한 인스턴스에 대해 이 옵션을 활성화할 수 있습니다.)
    • 보안 그룹: 3단계에서 구성한 보안 그룹을 선택합니다.
  3. 스토리지 및 키 페어: 스토리지를 구성하고 보안 SSH 액세스를 위해 키 페어를 연결합니다.

프라이빗 서브넷의 인스턴스에 액세스

프라이빗 서브넷에 있는 인스턴스에는 공용 IP 주소가 없으므로 공용 인터넷에서 직접 SSH로 연결할 수 없습니다. 다음 두 가지 보안 방법 중 하나를 사용해야 합니다.

  1. 배스천 호스트(점프 박스): 퍼블릭 서브넷에 소규모의 강화된 EC2 인스턴스를 시작합니다. 먼저 배스천 호스트에 SSH로 연결한 다음 배스천 호스트에서 개인 IP 주소를 사용하여 프라이빗 인스턴스에 SSH로 연결합니다.
  2. AWS Systems Manager(SSM) Session Manager: 선호되는 최신 방법입니다. 인스턴스에 SSM 에이전트가 설치되어 있고 SSM 연결을 허용하는 적절한 IAM 역할이 연결된 경우 인바운드 SSH 규칙이나 배스천 호스트 없이 AWS 콘솔에서 직접 보안 셸 세션을 시작할 수 있습니다.

요약 및 다음 단계

사용자 지정 VPC 내에서 EC2 인스턴스를 보호하려면 매크로 수준(VPC, 서브넷, 라우팅 테이블)에서 마이크로 수준(보안 그룹)까지 네트워크 보안을 계층화해야 합니다. IP 주소 지정 및 트래픽 흐름을 신중하게 제어함으로써:

  • 애플리케이션 서버가 격리된 프라이빗 서브넷에 상주하도록 합니다.
  • 필요한 경우에만 IGW 또는 NAT 게이트웨이를 사용합니다.
  • 보안 그룹 수신 규칙을 통해 최소 권한 원칙을 적용합니다.

인스턴스가 시작되면 AWS CloudTrail 및 VPC Flow Logs를 사용하여 활동을 모니터링하고 프라이빗 네트워크 트래픽에 대한 지속적인 가시성을 유지해야 합니다.