[AWS] VPC Endpoint

고구마양갱·2025년 1월 30일

AWS CLOUD

목록 보기
24/32
post-thumbnail

VPC ENDPOINT는 인터넷을 통하지 않고 VPC를 AWS 서비스에 직접 연결시켜 통신할 수 있게 한다. VPC는 인터넷을 통해서 AWS 서비스에 연결해야 하지만, 그렇게 하면 트래픽 사용량이 증가하여 비용이 증가할 것이다. 그래서 VPC ENDPOINT를 통해 인터넷을 거치지 않고 VPC와 AWS 서비스를 직접 연결한다.

1. VPC Endpoint ?

  위에서 설명했다시피, VPC Endpoint는 인터넷을 거치지 않고 VPC와 AWS 서비스를 직접 연결해주는 기능이다. VPC Endpoint 는 두가지 종류가 있는데,

1) interface endpoint
ENI (사설 IP, 프라이빗 링크)를 활성화하여 Endpoint로 사용하는 방식

- 대부분의 AWS 서비스와 연결 가능
- 시간 당, 사용량 당 비용 청구
- ENI 사용을 위한 보안그룹 설정 필요

2) gateway endpoint
게이트웨이를 활성화하여 라우팅테이블의 목적지로 사용하는 방식

- S3, dynamoDB 두가지 서비스만 연결가능
- 비용은 무료임
- 라우팅 테이블 접근 방식이므로 자동확장 가능

2. VPC Endpoint 구성

VPC Endpoint 를 생성 VPC와 S3를 연결할 것이다. 작업 순서는

- VPC Endpoint 에 연결할 S3 생성 및 이미지 업로드
- EC2 에게 S3 read 권한 부여
- VPC 와 S3 연결을 위한 VPC Endpoint (gateway)생성
- S3 접속 테스트
- VPC 와 S3 연결을 위한 VPC Endpoint (interface)생성
- S3 접속 테스트

이고, 생성 과정 자체는 어렵지 않다.

VPC Endpoint 구성 전 네트워크 구성 사전작업을 해야하는데, 하기의 글을 참고해서
bastion host 를 public 서브넷에, private host 를 private 서브넷에 구성한다.

[AWS] Bastion host 구성

1) S3 생성 및 이미지 업로드

  VPC Endpoint 에 연결해서 테스트 해볼 S3 bucket 을 생성하고, 이미지를 업로드한다.

S3 메뉴에서 create 를 선택해, bucket 생성 단계로 들어간다.
bucket name 을 입력하는데, bucket name은 모든 리전에서 중복되지 않는 유일한 값이어야 한다.

- Object Ownership 에는 ACLs disabled (디폴트 값)을 선택한다.
- Block Public Access settngs for this bucket 에는 block all public access (디폴트 값)을 선택한다.

S3 구성 자체가 목적이 아닌, VPC Endpoint 구성이 목적이므로 디폴트 값으로 설정해도 충분하다.

bucket versioning 등 다른 설정값들도 디폴트 값으로 둔다. (따로 건드리지 말고 그대로 두면 된다.) 그리고 우측 하단의 create bucket 을 선택하면 S3 bucket 이 생성된다.

생성된 S3 bucket을 확인할 수 있다.

생성한 S3 bucket 에 이미지 파일을 업로드할 것이고. 우측 상단의 upload 메뉴를 선택한다.

우측 상단의 Add files 를 선택해서, 업로드할 파일을 선택한다.

파일을 선택한 후 우측 하단의 upload 를 클릭해서 파일 업로드를 완료한다.

업로드 파일 목록에 이미지가 업로드 된 것을 확인할 수 있다.

업로드한 이미지를 선택해서 볼 수 있다.

2) EC2 -> S3 READ 권한 생성

  EC2 에서 VPC Endpoint 로 S3 접속 할 것이므로, EC2 에 S3 read 권한을 부여해야 한다. IAM 에서 S3 read 권한을 생성하고, private subnet 에 있는 EC2 인스턴스에 권한을 부여할 것이다.

권한을 부여할 EC2 인스턴스를 선택하고, actions > security > modify IAM role 을 선택한다.

Trusted entity type 은 AWS service 를 선택하고, service or use case 에는 EC2 (서비스)를 선택한다. 그리고 use case 에는 EC2 를 체크하고 우측 하단의 next 선택

VPC Endpoint 로 연결 시 S3 read 권한만 있으면 되므로 AmazonS3ReadOnlyAccess 권한을 체크한다. permission boundary는 건드리지 말고, 우측 하단의 next 를 선택한다.

role name을 입력하고 trust policy는 수정하지 않고 그대로 둔다.

add permissions, add tags 도 그대로 두고, 우측 하단의 create 를 선택해서 IAM ROLE 을 생성한다. (S3 read 권한을 부여하는 role 생성완료)

생성한 EC2-READ-S3 (IAM role)을 볼 수 있다.

EC2의 modify IAM role 로 돌아와서.방금 생성한 IAM role (EC2-READ-S3) 을 선택하고
우측의 UPDATE IAM role을 선택해서 EC2 에 권한을 부여한다.

EC2에 S3 read 권한 적용 완료

3) VPC Endpoint (gateway) 생성

  사전 준비를 했으니, gateway 기반의 VPC Endpoint를 생성, 적용해볼것이다.

VPC > PrivateLink and Lattice > Endpoints 메뉴에서 우측 상단의 create endpoint 를 선택한다.

name tag 에 endpoint 이름을 입력한다.

endpoint 서비스를 선택하는데, s3 로 검색하면 s3 와 관련된 endpoint 서비스가 나온다.
이 중 gateway 기반의 endpoint 를 선택한다. 바로 아래의 VPC 선택란은 private subnet이 있는 VPC를 선택한다.

Gateway 기반 endpoint 는 라우팅 테이블을 통해 통신을 수행한다. 그러므로 private 서브넷이 있는 라우팅 테이블을 선택해야 한다. (외부 인터넷과 통신할 수 없는 네트워크 환경에서 AWS 서비스를 사용하므로. 외부 인터넷과 연결되지 않는 서브넷을 선택하는 것이다.)

태그 설정은 그대로 두고 create endpoint 를 선택하면, gateway 기반 VPC endpoint 가 생성된다.

프라이빗 서브넷의 라우팅 테이블을 확인하며 첫번째 라인에 VPC Endpoint 와 연관된, 라우팅 레코드가 보인다. (라우팅 테이블에 자동으로 생성되므로, 별도로 생성할 필요도 없고, 수동으로 직접 생성해서도 안된다.)

bation host EC2 인스턴스를 통해 private EC2 인스턴스로 접속한다.

ping을 통해 외부 인터넷과 통신이 안됨을 확인한다. (외부 인터넷에 접속 안될 때, AWS 서비스에 접속되는지 테스트 하기 위함이다.)

s3 명령어로 이전 단계에서 생성한 S3 버킷 리스트와, 버킷에 업로드한 첨부파일을 확인 할 수 있다. 외부 인터넷과 단절되어 있지만, VPC Endpoint(gateway) 를 통해 S3 서비스에 연결하여 명령어를 사용할 수 있다.

생성한 VPC Endpoint (gateway)를 구성도로 나타내면 위와 같다.

4) VPC Endpoint (interface) 생성

  gateway 기반 VPC endpoint 를 구성했으니, 인스턴스 eni 기반 VPC endpoint 구성해볼 차례다.

name tag 에 endpoint 의 이름을 입력한다.

서비스에 s3를 검색하면 s3 와 관련된 endpoint 서비스들이 나오는데 interface type의 두번째 서비스를 선택한다. (아래에 다른 서비스들도 있으나, s3 의 일반적인 기능들을 쓸 것이므로 범용 기능을 갖춘 두번째 서비스를 선택한다. )

VPC 선택은 private 서브넷이 있는 VPC를 선택하고, 바로 아래의 DNS name 설정은 체크하지 않는다. 왜냐하면 s3 서비스는 endpoint의 DNS NAME 옵션을 적용할 수 없기 때문이다. (S3 서비스 특성상 적용 불가, s3 이외 다른 AWS 서비스는 적용가능할 것이다.) DNS record ip type 은 IPv4 로 선택한다.

interface 기반 endpoint 는 AZ(가용영역)과 서브넷을 지정해야 한다. private 서브넷이 있는 가용영역을 선택하고, 서브넷은 생성해둔 private 서브넷을 선택한다.
ip address type 은 IPv4를 선택한다.

interface 기반 endpoint 는 Security group(보안그룹)을 선택해야 한다. inbound, outbound 가 any로 설정된 보안그룹(디폴트 보안그룹)을 선택한다.

policy 에는 full access 를 선택한다.

tag 설정은 건드릴 필요 없고, create endpoint 를 선택해서 interface 기반 VPC endpoint 를 생성한다.

생성한 VPC Endpoint (interface)를 확인할 수 있다. s3 접속 테스를 해야하는데
우측 하단에 보면 DNS names 가 있고 아래에 주소들이 있는데, 첫번째 주소를 통해서 s3 서비스에 접근할 수 있다.

aws s3 ls --endpoint-url https://bucket.[S3 DNS NAME].s3.[region name].vpce.amazonaws.com

명령어를 입력하면 생성한 s3 버킷 리스트를 볼 수 있다.

aws s3 ls s3://[bucket name] --endpoint-url https://bucket.[S3 DNS NAME].s3.[region name].vpce.amazonaws.com

명령어를 입력하면 지정한 이름을 갖는 bucket의 파일, 폴더 목록을 볼 수 있다.

상기의 명령어 입력을 통해 생성한 s3 버킷리스트, 업로드한 첨부파일 목록을 볼 수 있다.

생성한 VPC Endpoint (interface)를 구성도로 나타내면 위와 같다.

0개의 댓글