클라우드/따라하면서 배우는 AWS 네트워크 입문

vpc 고급 - 게이트웨이, 인터페이스 엔드포인트

book_lover 2024. 6. 30. 22:43

vpc 엔드포인트

사용자가 생성한 VPC에서 AWS 퍼블릭 서비스와 통신하거나 다른 VPC로 통신이 필요할 경우 일반적으로 외부 인터넷 구간인 퍼블릭 네트워크를 통해 통신이 이루어진다.  AWS에서 제공하는 대부분의 서비스에 접근하기 위해서는 퍼블릭 네트워크 통신이 필요하지만 보안 요건이 필요할 경우 격리된 프라이빗 서브넷에 자원이 생성되어야 한다. 이 경우 퍼블릭 네트워크를 통해 통신이 불가능하다. 

 

VPC 엔드포인트는 AWS 버블릭 서비스 / 사용자가 생성한 서비스에 대해 외부 인터넷 구간을 통한 접근이 아닌 직접적으로 접근할 수 있는 프라이빗 액세스 기능이다. 

 

S3 스토리지 서비스를 외부 인터넷 접근이 아닌  내부의 프라이빗으로 연결하는 것이다. 

VPC 엔드포인트 유형

  • 엔드포인트 : AWS 퍼블릭 서비스 대상에 대한 프라이빗 연결
    • 게이트웨이 엔드포인트 : AWS 퍼블릭 서비스 중 S3와 DynamoDB에 대한 연결
    • 인터페이스 엔드포인트 : 위 대상 외에 나머지 AWS 퍼블릭 서비스에 대한 연결
  • 엔드포인트 서비스 : 사용자가 지정한 서비스 대상에 대한 프라이빗 연결
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
    Type: AWS::EC2::KeyPair::KeyName
    ConstraintDescription: must be the name of an existing EC2 KeyPair.
  LatestAmiId:
    Description: (DO NOT CHANGE)
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
    AllowedValues:
      - /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2

Resources:
  CloudNetaVPC:
    Type: AWS::EC2::VPC
    Properties:
     CidrBlock: 10.0.0.0/16
     Tags:
        - Key: Name
          Value: CloudNeta-VPC

  CloudNetaIGW:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: CloudNeta-IGW

  CloudNetaIGWAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      InternetGatewayId: !Ref CloudNetaIGW
      VpcId: !Ref CloudNetaVPC

  CloudNetaPublicRT:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref CloudNetaVPC
      Tags:
        - Key: Name
          Value: CloudNeta-Public-RT

  DefaultPublicRoute:
    Type: AWS::EC2::Route
    DependsOn: CloudNetaIGWAttachment
    Properties:
      RouteTableId: !Ref CloudNetaPublicRT
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref CloudNetaIGW

  CloudNetaPrivateRT:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref CloudNetaVPC
      Tags:
        - Key: Name
          Value: CloudNeta-Private-RT

  CloudNetaPublicSN:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref CloudNetaVPC
      AvailabilityZone: !Select [ 0, !GetAZs '' ]
      CidrBlock: 10.0.0.0/24
      Tags:
        - Key: Name
          Value: CloudNeta-Public-SN

  CloudNetaPrivateSN:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref CloudNetaVPC
      AvailabilityZone: !Select [ 2, !GetAZs '' ]
      CidrBlock: 10.0.1.0/24
      Tags:
        - Key: Name
          Value: CloudNeta-Private-SN

  CloudNetaPublicSNRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref CloudNetaPublicRT
      SubnetId: !Ref CloudNetaPublicSN

  CloudNetaPrivateSNRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref CloudNetaPrivateRT
      SubnetId: !Ref CloudNetaPrivateSN

  CloudNetaSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable HTTP access via port 80 and SSH access via port 22
      VpcId: !Ref CloudNetaVPC
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '80'
        ToPort: '80'
        CidrIp: 0.0.0.0/0
      - IpProtocol: tcp
        FromPort: '22'
        ToPort: '22'
        CidrIp: 0.0.0.0/0

  CloudNetaPublicEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: !Ref LatestAmiId
      KeyName: !Ref KeyName
      Tags:
        - Key: Name
          Value: CloudNeta-Public-EC2
      NetworkInterfaces:
        - DeviceIndex: 0
          SubnetId: !Ref CloudNetaPublicSN
          GroupSet:
          - !Ref CloudNetaSecurityGroup
          AssociatePublicIpAddress: true

  CloudNetaPrivateEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: !Ref LatestAmiId
      KeyName: !Ref KeyName
      Tags:
        - Key: Name
          Value: CloudNeta-Private-EC2
      NetworkInterfaces:
        - DeviceIndex: 0
          SubnetId: !Ref CloudNetaPrivateSN
          GroupSet:
          - !Ref CloudNetaSecurityGroup
      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash
            (
            echo "qwe123"
            echo "qwe123"
            ) | passwd --stdin root
            sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
            sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
            service sshd restart

ping s3.ap-northeast-2.amazonaws.com

  • 퍼블릭 ec2는 s3와 통신하기 위해 데이터를 가상 라우터로 전달
  • 가상 라우터는 퍼블릭 라우팅 테이블 참고하여 인터넷 게이트웨이로 향하는 라우팅 경로를 확인하여 전달
  • 인터넷 구간을 통해 s3로 데이터 전달, 정상적인 통신 가능
  • 프라이빗 ec2는 s3와 통신하기 위해 데이터를 가상 라우터로 전달, 하지만 프라이빗 라우팅 테이블에는 경로가 없어통신이 불가능

게이트웨이 엔드포인트 생성

 

자동으로 라우팅테이블에 경로 생성

  • ping s3.ap-northeast-2.amazonaws.com
  • 퍼블릭/프라이빗 ec2 인스턴스에서 s3와 통신하기 위해 데이터를 가상 라우터로 전달
  • 가상 라우터는 각 라우팅 테이블 참고하여 게이트웨이 엔드포인트로 향하는 라우팅 경로를 확인하여 전달
  • 게이트웨이 엔드포인트를 통해 s3로 데이터가 전달, 정상적인 통신이 가능

인터페이스 엔드포인트

인터페이스 엔드포인트 만들기

해당 엔드포인트 상세정보로 dns 정보 확인 가능

 

dig로 확인하면 ip주소가 프라이빗 ip주소로 확인 됨.

 

참고사이트

https://btcd.tistory.com/230

 

[AWS] VPC - 엔드포인트로 프라이빗 링크 구성

이번 주에도 실습으로 돌아온 수 지 타 산 입니다. 앞서 저희는 네트워크 기본개념을 시작으로 VPC에 대해 공부를 진행하였고, 최근에는 관련 내용 실습에 집중하고 있죠? AWS 혹은 클라우드 자체

btcd.tistory.com