본문 바로가기
Public Cloud/AWS - Practice

[AWS] ECR VPC Endpoint 생성 간단히 정리

by ymkim 2025. 5. 3.

현재 ECS는 Private Subnet에 위치한 상태로 클러스터링되어 운영 중이다. 이처럼 Private 대역에서 구동되는 경우, 외부 인터넷에 접근할 수 있는 NAT 경로가 없다면 ECR에서 Docker 이미지를 Pull할 수 없다. 특히 사내 서비스와 같이 NAT를 통한 외부 통신이 차단된 환경에서는 이러한 문제가 발생한다. 이를 해결하기 위해 AWS에서는 VPC Endpoint를 통해 내부 네트워크에서만 접근 가능한 전용 경로를 제공한다. 이번 글에서는 ECR Interface VPC Endpoint와 S3 Gateway Endpoint의 개념과 설정 방법에 대해 간략히 알아본다. 우선 VPC Endpoint 중 Interface와 Gateway 타입의 차이에 대해 먼저 정리하고 넘어가자.

01. ECR 도메인 접근

https://aws.amazon.com/ko/blogs/korea/setting-up-aws-privatelink-for-amazon-ecs-and-amazon-ecr

 

nslookup {aws account}.dkr.ecr.ap-northeast-2.amazonaws.com          
Server:         100.100.100.100
Address:        100.100.100.100#53

Non-authoritative answer:
{aws account}.dkr.ecr.ap-northeast-2.amazonaws.com       canonical name = nlb3-3c9644ec199a0f79.elb.ap-northeast-2.amazonaws.com.
Name:   nlb3-3c9644ec199a0f79.elb.ap-northeast-2.amazonaws.com
Address: 13.124.118.182

.dkr.ecr.ap-northeast-2.amazonaws.com는 서울 리전에 위치한 ECR 리포지토리 도메인이다. 필자의 계정에서는 별도로 ECR 리소스를 생성하지 않았더라도, nslookup 명령어로 해당 도메인을 조회하면, 이 도메인이 내부적으로 NLB(Network Load Balancer)의 CNAME으로 설정되어 있음을 확인할 수 있다. 이는 ECR이 마치 내 계정 내 리소스처럼 보일 수 있지만, 실제로는 AWS가 자체적으로 운영하는 퍼블릭 서비스이며, 인터넷을 통해 접근 가능하도록 NLB를 통해 트래픽을 처리하는 구조이기 때문이다. 핵심은 ECR 서비스는 AWS가 운영하는 퍼블릭 서비스이며, IGW + NAT를 통해 인터넷 접속이 필요하다는 부분이다.

https://aws.amazon.com/ko/blogs/korea/setting-up-aws-privatelink-for-amazon-ecs-and-amazon-ecr/

 

그렇다면 NAT + IGW을 통해 인터넷 접속이 불가한 경우는 어떻게 하는가? 이러한 경우 AWS PrivateLink를 통해 ECR에 내부 통신하여 접근이 가능하다. 즉, AWS PrivateLink를 통해 ECR에 프라이빗하게 접근이 가능한 것이다.

01. ECR Interface VPC Endpoint

ECR Interface VPC Endpoint는 AWS PrivateLink(AWS 전용 비공개 통로)로 동작한다. VPC 내부 ENI Private IP를 통해 AWS ECR에 비공개로 접근하여 모든 트래픽을 AWS 네트워크 내부로 제한한다. 또한, IGW, NAT, Gateway VPN 같은 경로는 필요없지만, ENI 사용에 따른 비용이 발생한다.

01-1. Interface Endpoint

Interface Endpoint는 보안그룹과 서브넷을 통해 트래픽을 제어한다.

  • ECR DKR Endpoint
    • domain : com.amazonaws.ap-northeast-2.ecr.dkr
    • Docker Client와 통신하며, 이미지를 푸시(Push), 풀(Pull) 하는 데 사용하는 VPC 엔드포인트
    • 중요한 부분은, ECR DKR Interface를 통해 이미지 레이어가 전달되기는 하나, 해당 레이어 데이터는 S3에서 읽어오기 때문에, VPC 내부에서만 통신하려면 S3 Gateway Endpoint가 반드시 필요하다
  • ECR API Endpoint
    • domain : com.amazonaws.ap-northeast-2.ecr.api
    • 리포지토리를 만들거나(Create Repository), 이미지, 태그 목록을 조회/삭제(DescribeImages, BatchDeleteImage) 등의 ECR 관리를 위한 HTTPS 기반의 REST API 통신을 위한 엔드포인트

01-2. PrivateLink와 ECR?

PrivateLink는 VPC 내부에서 AWS 서비스에 인터넷 없이 프라이빗하게 접근할 수 있도록 해주는 기능이다. ECR은 기본적으로 퍼블릭 도메인을 사용하므로 인터넷 연결이 필요하지만, Interface Endpoint(ecr.api, ecr.dkr)를 생성하고 Private DNS를 활성화하면, 동일한 도메인이 VPC 내부의 프라이빗 IP(ENI)로 해석되어 인터넷 없이도 ECR에 접근할 수 있다.

02. S3 Gateway VPC Endpoint

Gateway Endpoint는 DynamoDB, S3와 같은 일부 서비스에서만 사용이 가능하다. 또한, VPC 라우팅 테이블을 통해 직접 접근하는 방식으로 동작한다. 요금은 무료이며, 설정이 비교적으로 간단하다는 장점이 있다.

02-1. Gateway Endpoint

Gateway Endpoint는 라우팅 테이블(Routing Table)을 통해 트래픽을 제어한다.

  • S3 Gateway Endpoint
    • domain : com.amazonaws.ap-northeast-2.s3
    • ECR은 이미지 레이어(Blob)을 자체 저장하지 않고, S3에 이미지 레이어(Blob)을 저장한다
      그렇기에, 실제 이미지 레이어(Blob)은 S3에서 받아서 사용을 해야 한다
    • ECR Interface DKR → S3 → 이미지 레이어 획득 → 응답

03. VPC 엔드포인트 생성

이번에는 실제로 VPC 엔드포인트를 생성하는 과정을 정리해보자. 우선 ECR Interface Endpoint를 생성한다.

03-1. com.amazonaws.ap-northeast-2.ecr.dkr

  • 이름 태그 : VPC Endpoint의 이름을 지정한다
  • 유형 : AWS 서비스 선택한다
  • 서비스 : VPC Endpoint 유형을 선택, 우선 ECR DKR Endpoint를 먼저 생성한다

  • VPC
    • VPC Endpoint가 생성될 대상 VPC를 선택하는 항목이다
  • DNS 이름 활성화
    • 이 옵션을 체크하면, ECR 도메인(*.dkr.ecr..amazonaws.com)을 프라이빗 IP(ENI)로 해석할 수 있도록 Private DNS가 활성화 된다. 즉, 퍼블릭 도메인이 내부 ENI로 바뀌어 인터넷 없이 접근하는 경우 활성화 해야 한다
  • 서브넷
    • VPC 내의 ENI를 배치할 서브넷을 선택한다. 각 서브넷마다 ENI가 생성되어 VPC 내부 트래픽을 라우팅하게 된다
    • IP 주소 지정의 경우, 특정 Private IP를 지정하고 싶은 경우 사용한다.
  • 보안 그룹
    • Interface Endpoint는 ENI를 사용하기에 보안그룹이 필요하다. 그렇기에 여기서 지정한 보안그룹이 ECR 접근 요청을 허용할지를 제어한다.
    • 예 : ECS → Endpoint 443 포트 접근 허용 등

03-2. com.amazonaws.ap-northeast-2.ecr.api

  • ecr.api Endpoint 역시, 위에서 ecr.dkr Endpoint를 생성할때와 동일하게 생성을 해준다
  • 서비스에서, ecr.dkr → ecr.api로만 변경해주면 된다

03-2. S3 Gateway VPC Endpoint 생성

마지막으로 S3 Gateway Endpoint를 생성한다

사용자의 VPC를 지정하고, 라우팅 테이블은 Private Subnet에 연결되어 있는 rt를 지정한다.

지금까지 VPC Endpoint 생성 방법에 대해 정리하였다. 생략된 부분이 있을 수 있으나, 핵심 내용만 참고하여 상황에 맞게활용하길 바란다.

03-3. 보안 그룹 설정 관련

ECS를 구동하는 경우, 해당 ECS 서비스에 연결된 보안그룹(search-ecs-api-sg)의 인바운드에는 VPC 전체 대역(172.21.0.0/16)을 지정하여 내부 통신을 허용한다. 아웃바운드의 경우, ECR Interface Endpoint가 생성된 서브넷 대역(172.21.50.0/24, 172.21.60.0/24)에 대해 443 포트를 허용해야 ECR과의 HTTPS 통신이 가능하다. 가장 단순한 방식은 0.0.0.0/0 전체에 대해 443 포트를 허용하는 것이나, 보안 측면에서 필요 최소 범위로 제한하는 것이 바람직하다.

99. 참고 자료

 

Amazon ECR 인터페이스 VPC 엔드포인트(AWS PrivateLink) - Amazon ECR

Windows 이미지의 기본 계층은 크기가 큽니다. 큰 크기의 계층은 푸시하는 데 시간이 길어지고 Amazon ECR에서 이러한 이미지에 대한 추가 스토리지 비용을 발생시킵니다. 이러한 이유로 빌드 시간과

docs.aws.amazon.com

 

Amazon ECS와 Amazon ECR의 AWS PrivateLink 설정 방법 | Amazon Web Services

Amazon ECS와 Amazon ECR에서 AWS PrivateLink가 정식으로 지원됩니다. AWS PrivateLink는 AWS 서비스 액세스에 대한 높은 가용성과 확장성을 제공하기 위한 네트워킹 기술입니다. 이 기술을 사용하면 모든 트래

aws.amazon.com

 

Amazon ECR 와 PrivateLink

"우리 Onprem에 있는 Jenkins 서버에서 ECR을 접근해야 하는데 접근이 안되네요 왜 그런 거죠?" 이 고객사는 Jenkins 서버를 VPN이 연결되어 있는 Onprem에 위치해 놓았다. 그리고 외부 통신은 제한을 해 둔

halfmoon95.tistory.com

 

VPC Endpoint로 ECR 연결하기 (Docker hub와 S3의 관계)

기존에는 VPC Interface Endpoint 중에 ecr.api만 연결해 주면, ECR private link로 연결되는 알았다.하지만 테스트 결과, NAT Gateway를 VPC에서 빼주면 Fargate가 ECR에서 컨테이너 이미지를 가져오지 못하는 것을

everenew.tistory.com