서브넷을 통한 EC2 공인 인스턴스 노출

EC2의 공인 주소, 라우팅과 접근 규칙을 함께 검토해 불필요한 인터넷 노출을 줄이세요.

설명

공인 IPv4 주소가 있는 EC2 인스턴스는 인터넷 게이트웨이 경로와 접근 규칙이 허용하면 인터넷에서 직접 접근할 수 있습니다. 공인 주소나 기본 경로 하나만으로 접근 가능 여부가 결정되지는 않으며, 기본 경로가 NAT 게이트웨이로 향하는 경우도 구분해야 합니다.

내부용 워크로드는 직접적인 인터넷 인바운드가 필요하지 않도록 설계하세요. 필요한 외부 통신은 NAT 또는 서비스별 VPC 엔드포인트 등 목적에 맞는 경로로 제공할 수 있습니다.

잠재적 영향

  • 공개 경로와 넓은 인바운드 허용이 함께 있으면 취약한 서비스가 외부 공격 대상이 될 수 있습니다.
  • 네트워크를 바꾸면서 관리·의존 서비스의 경로를 준비하지 않으면 정상적인 연결이 끊길 수 있습니다.

해결 방법

  • 공인 IPv4 자동 할당이 필요 없는 새 인스턴스는 AssociatePublicIpAddress: false로 구성하세요. 기존 주소, Elastic IP와 IPv6 접근은 별도로 확인하세요.
  • 내부 인스턴스에는 인터넷에서 직접 들어오는 경로를 두지 말고 필요한 외부 통신과 관리 경로를 준비하세요.
  • 공개 서비스도 보안 그룹과 NACL에서 필요한 접근만 허용하고, 애플리케이션 인증과 권한 검사를 유지하세요.

예시

AMI와 서브넷 참조는 실제 환경 값으로 준비해야 합니다. 라우팅과 보안 그룹은 생략했으며, 서로 다른 인스턴스 구성을 비교하므로 기존 인스턴스를 그대로 전환하는 절차가 아닙니다.

변경 전

yaml
Resources:
  PublicInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0ff8a91507f77f867
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: "0"
          SubnetId: !Ref PublicSubnet

공인 IPv4 할당을 요청합니다. 서브넷의 이름만으로 공개 경로를 알 수는 없으므로 실제 라우팅과 접근 규칙도 확인하세요.

변경 후

yaml
Resources:
  PrivateInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0ff8a91507f77f867
      NetworkInterfaces:
        - AssociatePublicIpAddress: false
          DeviceIndex: "0"
          SubnetId: !Ref PrivateSubnet

공인 IPv4 자동 할당을 끕니다. 실제 프라이빗 경로, 필요한 외부 연결과 관리 접근도 함께 구성해야 합니다.

참조