Today Keys : S3, dns, name, onprem, on-premises, interface, endpoint, private link, resolver, route53, hybrid, 온프레미스
이번 포스팅은 S3 Interface Endpoint에 대한 DNS name 속성을 사용하여 On-Premises에서 DX/VPN으로 S3 접근 시 S3의 리전 DNS Name으로 접근하도록 구성해보는 포스팅입니다. 기존에는 S3 Interface Endpoint에서는 다른 Interface Endpoint에서 지원되는 DNS name 속성이 지원되지 않았기 때문에 On-Premises에서 접근 시에 Interface Endpoint 별도의 DNS Name을 사용해서 접근을 했지만, 이번에 DNS Name이 지원되면서 보다 편리하게 On-Premises에서 S3로의 접근이 가능해졌습니다.
On-Premises에서 S3를 Direct Connect나, VPN을 이용해서 접근을 하기 위해서 Interface Endpoint를 사용 할 수 있습니다. 하지만, S3의 경우에는 Gateway Endpoint도 존재하고 있고, VPC 내에서는 Gateway Endpoint를 사용하는 것이 좀 더 효율적이기 때문에 S3 의 Interface Endpoint는 'Enable DNS name' 속성을 지원하지 않았었습니다.
따라서, 기존에 S3를 호출하던 URL(*.s3.region.amazonaws.com)과 동일하게 S3를 사용 할 수 없기 때문에 , Interface Endpoint 생성 시에 만들어진 별도의 DNS name으로 호출해야 했습니다.
하지만, 이제 S3에 대한 'Enable DNS name' 속성을 지원하면서 On-Premises에서도 S3에 대한 연결 시에 S3에 대한 기본 DNS name을 사용 할 수 있게 되었습니다. ('23.3.14 GA)
이번 포스팅에서는 S3의 Enable DNS name 속성을 활성화하여 On-Premises에서 S3로 접근하는 예제를 다뤄봅니다.
이번 포스팅에서 다뤄질 전체 구성은 다음과 같습니다.
먼저 S3에 대한 VPC Endpoint를 구성하기 전의 On-Premises의 서버에서 S3에 대한 DNS Name에 대한 질의 결과를 확인해 보면, S3가 갖고 있는 공인 IP 주소로 응답하는 것을 볼 수 있습니다.
현재 On-Premises의 서버는 인터넷으로 연결되어 있고, S3에서도 접근을 허용한 상태이기 때문에
다음과 같이 S3로 접근이 가능한 것을 볼 수 있습니다.
ZIGI-VPC라는 VPC 내부의 ZIGI-SVR(10.10.0.4) 서버에서도 동일하게 S3에 대한 DNS Name 질의 결과를 확인하면 동일하게 S3가 갖고 있는 공인 IP 주소로 응답하는 것을 볼 수 있습니다.
이제 On-Premises에서 S3의 일반 DNS Name을 통해 접근 할 수 있도록 해 보겠습니다.
먼저 On-Premises의 서버가 VPC의 Private DNS에 대한 질의를 할 수 있도록 Inbound 유형의 Route 53 Resolver를 만듭니다.
Inbound Endpoint에 대한 Name, VPC, SG, Type을 입력합니다.
2개의 Inbound Endpoint 구성을 위해서, 서로 다른 AZ의 서브넷을 설정합니다.
Inbound Endpoint에 대한 IP는 자동 구성도 되지만, 저는 각각 10.10.1.53, 10.10.2.53 으로 설정하여 만듭니다.
Route53 Resolver에 대한 Inbound Endpoint가 정상적으로 다음과 같이 생성된 것을 볼 수 있습니다.
On-Premises의 DNS에서는 Conditional Forwarders 설정으로,
S3에 대한 DNS 주소를 방금 만든 Route53 Resolver의 Inbound Endpoint의 IP 주소로 설정해둡니다.
이제 S3에 대한 Interface Type의 Endpoint를 만듭니다.
VPC의 설정에서 Additional settings을 확장해서 보면, Enable DNS name 속성이 나오는 데 해당 속성을 체크합니다.
기존에 S3의 Interface Endpoint의 경우에는 Enable DNS name 속성이 지원되지 않았기 때문에 On-Premises에서 S3의 Endpoint 사용 시에 S3 Interface Endpoint에 대한 별도 DNS Name으로만 접근을 했었지만, 이제는 VPC와 마찬가지로 S3의 기본 DNS Name으로 조회를 하더라도 VPC의 Private DNS에서 Interface Endpoint IP주소로 응답을 할 수 있게 되었습니다.
단, 여기서 유의 할 점은 'Enable private DNS only for inbound endpoint' 옵션도 함께 체크를 해주셔야 한다는 것입니다.
이 옵션을 체크하지 않으면 S3 DNS Name(*.s3.region.amazonaws.com)에 대해서 On-Premises뿐 아니라, VPC 내에서도 S3 Interface Endpoint의 IP 주소로 응답을 하게 되어서, VPC 내에서 S3 접근 시에도 Interface Endpoint를 사용하게 됩니다.
이 경우에 접근이 안되는 것은 아니지만, Interface Endpoint의 경우에는 데이터 처리에 대한 비용이 발생하기 때문에 S3의 경우에 VPC 내에서 접근할 때는 Gateway Endpoint를 사용하는 것이 좋습니다.
DNS Names 옵션을 하고 나면, 이제 Interface Endpoint의 ENI가 생성 될 Subnet을 설정하고, 해당 ENI에 적용 될 SG를 체크한 후, S3 Interface Endpoint를 생성합니다.
단, S3 Interface Endpoint를 만들 때 'Enable private DNS only for inbound endpoint' 옵션을 사용할 경우에는 반드시 사전에 Gateway Endpoint를 만들어야만 Interface Endpoint가 생성 됩니다. 그렇지 않으면 아래와 같은 오류가 발생합니다.
(물론, 옵션을 체크하지 않으면 Gateway Endpoint 없이도 생성이 되긴 합니다.)
이제 S3에 대한 Interface Endpoint가 정상적으로 생성된 것을 볼 수 있습니다.
저는 Route53 Resolver의 Inbound endpoint에서만 S3 Interface Endpoint가 조회 될 수 있도록, 'Enable private DNS only for inbound endpoint' 옵션을 사용하였기 때문에 Gateway Endpoint도 함께 생성 된 것을 볼 수 있습니다.
생성된 S3 Interface Endpoint를 보면 다음과 같이 생성된 상태를 자세히 볼 수 있습니다.
'Private DNS names enabled' 와 'Private DNS only for inbound endpoint' 속성이 각각 Yes, True인 것을 확인 할 수 있습니다.
Details 속성 중에 보시면, Private DNS names가 3으로 표기 되어 있는 데 '3'을 클릭해보면,
다음과 같이 3개의 DNS names이 Private DNS를 통해서 Interface Endpoint IP로 도메인 질의에 답을 하게 될 것임을 알 수 있습니다.
S3의 Interface Endpoint IP 주소를 확인하겠습니다.
S3 Interaface Endpoint의 'Subnet' 속성에서 Interface Endpoint의 ENI가 각각 10.10.1.14, 10.10.2.55 로 생성된 것을 볼 수 있습니다.
이제 모든 설정이 끝났고, On-Premises의 ZIGI-bot이라는 서버에서 다시 S3에 대한 도메인 질의와 접속 테스트를 해보겠습니다.
S3에 대한 도메인 질의 시에, S3에 대한 IP 주소가 방금 전에 생성한 S3 Interface Endpoint IP로 응답하는 것을 볼 수 있고, S3에 정상적으로 접근이 되는 것을 볼 수 있습니다.
VPC에 있는 ZIGI-SVR 서버에서는 기존과 동일하게 S3의 공인 IP 주소로 응답이 되고, 서비스 접근이 되는 것을 볼 수 있습니다.
물론 본 포스팅 처음과 다른 점은 S3 Interface Endpoint를 설정하는 과정에 S3 Gateway Endpoint도 설정했기 때문에 지금은 VPC 내에서는 Gateway Endpoint를 통해서 접근이 되는 것입니다.
S3의 경우, VPC 내에서 뿐만 아니라 On-Premises에서도 Direct Connect나 VPN을 통해서 접근을 원하는 경우가 많았던 것 같습니다.
초기에는 그 접근을 위해서 초기에 Proxy를 구성을 하시기도 하고, S3 Interface Endpoint 출시 이후에는 Interface Endpoint에 대한 별도 DNS Names으로 접근을 하실 수 있었지만, 이번에 S3 Interface Endpoint에서 DNS names 속성을 지원하면서 좀 더 수월하게 On-Premises에서 S3에 접근하도록 구성 할 수 있게 된 것 같습니다.