Amazon Web Services 한국 블로그

새로운 기능 — Amazon VPC Reachability Analyzer

Amazon Virtual Private Cloud(VPC)를 사용하면 AWS 클라우드에서 논리적으로 격리된 고객별 가상 네트워크를 시작할 수 있습니다. 고객이 클라우드를 확장하고 점점 더 복잡해지는 네트워크 아키텍처를 구축함에 따라 잘못된 구성으로 인한 네트워크 연결 문제를 해결하는 데 시간이 오래 걸릴 수 있습니다.

이제 한 VPC 내의 두 엔드포인트 또는 여러 VPC 내의 엔드포인트 간에 연결 가능성 문제를 해결하는 네트워크 진단 도구인 VPC Reachability Analyzer를 발표합니다.

네트워크 구성이 의도한 대로 되었는지 확인하는 방법
IP 주소 범위 선택, 서브넷생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워크 환경을 완벽하게 제어할 수 있습니다. 또한 VPC의 네트워크 구성을 쉽게 사용자 지정할 수 있습니다. 예를 들어 인터넷 게이트웨이를 사용하여 인터넷에 액세스할 수 있는 웹 서버의 퍼블릭 서브넷을 만들 수 있습니다. 데이터베이스 및 애플리케이션 서버와 같이 보안에 민감한 백엔드 시스템을 인터넷에 액세스할 수 없는 프라이빗 서브넷에 배치할 수 있습니다. 보안 그룹네트워크 ACL(액세스 제어 목록)과 같은 여러 보안 계층을 사용하여 프로토콜, IP 주소 및 포트 번호별로 각 서브넷의 엔터티에 대한 액세스를 제어할 수 있습니다.

또한 트래픽을 비공개로 라우팅할 수 있는 리전 전체 또는 글로벌 네트워크 연결에 대해 VPC 피어링 또는 AWS Transit Gateway를 통해 여러 VPC를 결합할 수도 있습니다. VPN 게이트웨이를 사용하여 사이트를 AWS 계정에 연결하여 안전하게 통신할 수도 있습니다. AWS Lambda 또는 Amazon S3와 같이 VPC 외부에 있는 대부분의 AWS 서비스는 VPC 엔드포인트 또는 AWS PrivateLink를 VPC 내부의 엔티티로서 지원하고 비공개로 통신할 수 있습니다.

이러한 풍부한 컨트롤과 기능 집합이 있는 경우 연결 문제가 발생할 수 있는 의도하지 않은 구성이 있는 것은 드문 일이 아닙니다. 현재 VPC 연결 가능성 분석기를 사용하여 패킷을 전송하지 않고 두 엔드포인트 간의 연결 가능성을 분석할 수 있습니다. VPC 연결 가능성 분석기는 VPC에 있는 모든 리소스의 구성을 살펴보고 자동화된 추론을 사용하여 실행 가능한 네트워크 흐름을 결정합니다. 유선으로 트래픽을 보낼 필요 없이 네트워크를 통해 가능한 모든 경로를 분석합니다. 이 알고리즘 작동 방식을 자세히 알아보려면 re:Invent talk 또는 이 설명서를 확인하세요.

VPC Reachability Analyzer 작동 방식
이제 작동 방식을 살펴 보겠습니다. VPC 연결 가능성 분석기를 사용하는 것은 매우 간단하며 현재 VPC에서 테스트할 수 있습니다. 테스트를 위해 격리된 VPC가 필요한 경우 이 문서의 맨 아래에 있는 AWS CloudFormation YAML 템플릿을 실행할 수 있습니다. 템플릿은 서브넷 1개, 보안 그룹 2개, 인스턴스 3개가 있는 VPC를 A, B, C로 만듭니다. 인스턴스 A와 B는 서로 통신할 수 있지만 인스턴스 C에 연결된 보안 그룹은 들어오는 트래픽을 허용하지 않기 때문에 인스턴스 C와 통신할 수 없습니다.

VPC 관리 콘솔의 왼쪽 탐색에 Reachability Analyzer가 표시됩니다.

[연결 가능성 분석기(Reachability Analyzer)]를 클릭하고 [경로 생성 및 분석(Create and analyze path)] 단추를 클릭하면 소스와 대상 사이의 경로를 지정하고 분석을 시작할 수 있는 새 창이 표시됩니다.

통신 원본과 대상에 대한 VPN 게이트웨이, 인스턴스, 네트워크 인터페이스, 인터넷 게이트웨이, VPC 엔드포인트, VPC 피어링 연결 및 전송 게이트웨이의 엔드포인트 유형을 지정할 수 있습니다. 예를 들어 원본에 인스턴스 A를 설정하고 대상에 인스턴스 B를 설정합니다. TCP 또는 UDP 프로토콜을 통해 연결 가능성을 확인하도록 선택할 수 있습니다. 선택적으로 포트 번호, 소스 또는 대상 IP 주소를 지정할 수도 있습니다.

테스트 경로 구성

마지막으로 [경로 생성 및 분석(Create and analyze path)] 버튼을 클릭하여 분석을 시작합니다. 분석은 VPC의 크기와 복잡성에 따라 최대 몇 분이 걸릴 수 있지만 일반적으로 몇 초가 걸립니다.

이제 분석 결과를 연결 가능으로 볼 수 있습니다. 분석 ID nip-xxxxxxxxxxxxxxxxx의 URL 링크를 클릭하면 홉별 경로 홉을 볼 수 있습니다.

인스턴스 C에 연결된 보안 그룹은 들어오는 트래픽을 허용하지 않으므로 인스턴스 A에서 인스턴스 C로의 통신에 연결할 수 없습니다.

자세한 내용을 보려면 nip-xxxxxxxxxxxxxxxxx를 클릭하면 자세한 내용은 설명을 확인할 수 있습니다.

결과 세부 정보

여기에 통신을 차단한 보안 그룹이 표시됩니다. 오른쪽 위에 나열된 보안 그룹을 클릭하면 보안 그룹 편집 창으로 직접 이동하여 보안 그룹 규칙을 변경할 수 있습니다. 이 경우 적절하게 범위가 지정된 수신 규칙을 추가하면 인스턴스가 통신할 수 있습니다.

정식 출시
이 기능은 중국(베이징)중국(닝샤) 리전을 제외한 모든 AWS 상용 리전에서 사용할 수 있습니다. 자세한 내용은 기술 설명서에서 확인할 수 있으며, 이 기능을 사용하려면 여기에 설명된대로 IAM 권한을 설정해야 합니다.

– Kame

테스트용 CloudFormation YAML 템플릿

---
설명: 서브넷 1개, 보안 그룹 2개, 인스턴스 3개를 포함하는 AWS VPC 구성 연결 가능성 분석기를 테스트할 때 찾은 경로와 찾을 수 없는 경로를 모두 제공합니다.
AWSTemplateFormatVersion: 2010-09-09

Mappings:
  RegionMap:
    us-east-1:
      execution: ami-0915e09cc7ceee3ab
      ecs: ami-08087103f9850bddd

Resources:
  # VPC
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default

  # Subnets
  Subnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 172.0.0.0/20
      MapPublicIpOnLaunch: false

  # SGs
  SecurityGroup1:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow all ingress and egress traffic
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: "-1" # -1 specifies all protocols

  SecurityGroup2:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow all egress traffic
      VpcId: !Ref VPC

  # Instances
  # Instance A and B should have a path between them since they are both in SecurityGroup 1
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup1

  # Instance A and B should have a path between them since they are both in SecurityGroup 1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup1

  # This instance should not be reachable from Instance A or B since it is in SecurityGroup 2
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      ImageId:
        Fn::FindInMap:
          - RegionMap
          - Ref: AWS::Region
          - execution
      InstanceType: 't3.nano'
      SubnetId:
        Ref: Subnet1
      SecurityGroupIds:
        - Ref: SecurityGroup2