VPC Endpoint란?
VPC 엔드포인트를 통해, IGW, NAT, VPN 연결 또는 연결을 필요로하지 않고 AWS 서비스 및 VPC 엔드포인트 서비스에 비공개로 연결할 수 있습니다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다. VPC와 기타 서비스간의 트래픽은 아마존 네트워크를 벗어나지 않습니다.
프라이빗 서브넷 같은 경우, 인터넷과의 접점이 없어 격리된 공간이지만, 이 상황에서도 AWS의 다양한 서비스를 연결할 수 있도록 지원하는 서비스를 VPC Endpoint라고 합니다.
VPC 엔드포인트는 크게 두가지로 나눌 수 있습니다.
Interface Endpoint
ENI(Elastic Network Interface) 기반
프라이빗 ip를 만들어 서비스로 연결시켜줍니다.
많은 서비스들을 지원합니다(SQS, SNS, Kinesis 등)
Gateway Endpoint
라우팅 테이블에서 경로의 대상으로 지정하여 사용
S3 및 DynamoDB 지원해줍니다.
같은 리전안에 있어도 VPC안에 있는 인스턴스들은 인터넷 게이트웨이를 거쳐야 인터넷과 통신이 되기 때문에, 같은 AWS 서비스라도 게이트웨이를 통과해서 사용해야한다는 불편함이 있었습니다.
하지만, 엔드포인트를 이용하면, VPC 내에서 쉽게 AWS 서비스들을 이용가능하게 해줍니다.
[실습] S3 게이트웨이 만들기
먼저 프라이빗 인스턴스가 S3를 사용하기 위해 인스턴스가 사용할 IAM 정책을 하나 만들어줍니다.
저는 기존에 만들어둔 VPC를 사용하여 프라이빗 인스턴스와 방금 만든 역할을 부여해주겠습니다.
퍼블릭 인스턴스는 S3를 쓰지 않을것이기 때문에, IAM을 제외하고 동일하게 만들어주면 됩니다.
인스턴스가 올라가는동안 S3 서비스에 들어와 버킷을 하나 생성해주도록 합니다.
인스턴스가 다 생성되었으면, 우리의 목표는 프라이빗 인스턴스에서 게이트웨이 엔트포인트를 통해 S3에 접근하는 것이니 이제 푸티를 열어서 퍼블릭 인스턴스에 접근한 후, ssh 명령어로 프라이빗 인스턴스로 접근해주도록 합니다.
aws s3 ls --region ap-northeast-2는 서울 리전안에 있는 버킷의 리스트를 보여달라는 명령어인데, 현재는 게이트웨이 엔드포인트가 연결되어있지 않으므로 당연히 버킷 리스트를 보여주지 않는 것을 볼 수 있습니다.
이제 엔드포인트를 설정해주도록 해봅시다. VPC 메뉴를자세히 보면 엔드포인트라는 항목이 있습니다.
다음 항목에 들어와 엔드포인트 생성을 누르면 다음과 같이 서비스 VPC 라우팅 테이블을 고르는란이 있습니다.
서비스는 s3를 검색하여 게이트웨이 유형을 골라주고, VPC와 라우팅 테이블은 프라이빗 인스턴스가 연결되어 있는 VPC, 라우팅을 골라주면 됩니다.
엔드포인트가 생성이 되면 이제 라우팅테이블에 프라이빗 라우팅을 봐봅니다.
라우트가 하나 더 추가적으로 설정되있는것을 알 수 있는데, S3에 대한 엔드포인트 전체는 현재 생성된 라우팅 경로에 모두 보내버린다는 라우팅이 설정되어 있습니다.
이제 다시 프라이빗 인스턴스로 돌아와 s3 리스트를 보여주는 명령어를 입력해보면,
정상적으로 S3 버킷의 리스트를 보여주는 명령어가 정상적으로 실행됐음을 알 수 있습니다.