VPC Endpoint 는 VPC 내부에서 별도의 인터넷 접속 없이 Amazon Network 상에 존재하는 AWS 서비스를 이용할 수 있도록 경로를 제공하는 VPC 의 네트워킹 서비스입니다. 보안이 강화된 조직에서는 VPC 내부에서 AWS 서비스에 대한 호출이 필요한 경우 이와 같은 VPC Endpoint 를 이용하여 Private 한 AWS Service 접근환경을 구성할 수 있습니다.
AWS 에서는 이와 같은 VPC Endpoint 를 Gateway Type Endpoint 와 Interface Type Endpoint 를 제공해오고 있습니다. 각각의 Endpoint Type 별로 장점과 단점이 존재하는데 신규로 VPC Endpoint 를 지원하는 AWS 서비스의 경우에는 모두 Interface Type VPC Endpoint 만을 지원하고 있습니다. 여러분들이 가장 많이 사용하는 S3 서비스도 VPC Endpoint 를 지원하는데 S3 의 경우에는 오랜 기간 동안 Gateway Type 의 VPC Endpoint 만을 지원해 왔습니다. 하지만 2021년 2월 S3 에서도 Interface Type 의 VPC Endpoint 를 지원하기 시작했는데요. 오늘 이 포스팅에서는 Interface Type 의 S3 VPC Endpoint 의 특징과 사용방법에 대해 살펴보도록 하겠습니다.
- S3 Interface Endpoint 생성
: Management Console 의 VPC 메뉴에서 Endpoints 로 이동한 후 “Create Endpoint” 를 선택하면 VPC Endpoint 를 생성할 수 있는 메뉴로 이동하게 됩니다. Endpoint 생성 메뉴에서 아래와 같이 S3 로 검색하면 3개의 VPC Endpoint 가 출력되는 것을 확인할 수 있는데요. 이 중 2개의 Endpoint 가 Interface Type 인 것을 확인할 수 있습니다. 이 2개의 Endpoint 중 일반적으로 사용되는 S3 Interface Endpoint 는 “com.amazonaws.region-code.s3” 이므로 이 Endpoint 를 선택한 후 선택한 Endpoint 가 설치될 Subnet 을 선택하면 S3 Interface Endpoint 를 생성하실 수 있습니다.
2. 생성된 S3 Interface Endpoint 정보 확인
: 정상적으로 S3 Interface Endpoint 가 생성되었다면 위 그림과 같이 생성된 S3 Interface Endpoint 의 상세 정보를 확인할 수 있는데요. 우리는 이 화면에서 중요한 사실 한 가지를 알수 있습니다. 바로, 상세 정보의 우측 화면을 보시면 위 그림과 같이 S3 Interface Endpoint 는 “Private DNS names enabled” 옵션이 “No” 로 선택되어 있다는 것입니다. 즉, VPC Endpoint 가 제공하는 Private DNS Name 기능을 사용할 수 없다는 것입니다.
일반적으로 VPC Interface Type Endpoint 의 경우 Private DNS Name 기능을 제공하고 옵션으로 관리자가 On/Off 할 수 있도록 기능을 제공하고 있으며 Default 값(On)을 선택한 경우 아래와 같이 Private DNS Name 정보가 등록되어 있는 것을 확인할 수 있습니다.
Private DNS Name 의 장점은 VPC Interface Endpoint 를 사용하고자 하는 사용자 혹은 Application 이 API 를 호출할 때 별도로 지정된 Endpoint DNS Name 을 사용할 필요 없이 Public Endpoint 의 DNS Name 을 그대로 사용할 수 있다는 것인데요. 예를 들면, 위와 같은 EC2 서비스를 위한 Interface Endpoint 가 생성되어 있는 환경에서는 아래와 같이 VPC 내부에서 Public Endpoint 로 사용되었던 Domain 을 호출하여도 VPC 내부 사설 IP 를 응답받는 것을 알 수 있습니다.
즉, 특정 Interface Endpoint 를 사용하기 위하여 별도로 DNS 설정을 변경하거나 Endpoint 정보를 지정할 필요 없이 기존에 Public Endpoint 를 이용하던 환경 그대로 이용하여도 Interface Endpoint 를 이용할 수 있다는 것이 아주 큰 장점이며 실제 이용환경에서 Interface Type Endpoint 가 가져다주는 편리함이라고 생각하시면 될 것 같습니다.
하지만, S3 Interface Endpoint 는 이와 같은 Private DNS Name 을 지원하지 않습니다. 따라서, S3 Interface Endpoint 를 생성하였다고 하더라도 Public Endpoint 로 요청을 하게 되면 아래와 같이 S3 Interface Endpoint 가 아닌 Public Endpoint 를 이용하게 됩니다.
결국 S3 Interface Endpoint 를 이용하기 위해서는 사용자가 S3 API 호출 시 S3 Interface Type Endpoint 의 URL 을 지정해줘야 하는데요.
AWS CLI 를 사용하는 경우 이용 방법은 아래와 같습니다.
aws s3 ls s3://bucketname/ --endpoint-url https://bucket.vpce-vpceid.s3.region-code.vpce.amazonaws.com
AWS CLI 가 아닌 REST API 를 이용하는 경우에도 마찬가지로 각 Language 에서 지원하는 방법들을 통하여 Endpoint URL 을 지정해주어야 합니다.
그리고 또 다른 방법으로는 Host 의 DNS 설정을 변경해주는 것도 가능한데요.
예를 들면 특정 VPC Endpoint 의 사설 IP 를 아래와 같이 nslookup 을 통해 알아낸 뒤 해당 IP 를 Public Endpoint Domain 에 대해 응답하도록 Host 파일에 등록하여 사용하는 방법도 가능합니다.
간단하게 S3 Interface Endpoint 를 사용하는 방법에 대해 알아보았는데요. S3 는 이제 Gateway Type 과 Interface Type 두 가지 VPC Endpoint를 모두 지원하는 AWS Service 가 되었습니다. 각각의 VPC Endpoint 가 장단점이 있는 만큼 실제 이용환경에서 사용하실 때에는 고려사항을 잘 참고하셔서 선택하시기 바랍니다.
감사합니다.