VPC Endpoint를 활용한 크로스 계정 ECR & S3 접근

VPC Endpoint를 활용한 크로스 계정 ECR & S3 접근

VPC Endpoint를 활용한 크로스 계정 ECR & S3 접근 방법에 대해 정리해 봤습니다.
2026.03.05

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 VPC Endpoint를 활용한 크로스 계정 ECR & S3 접근 방법에 대해 정리해 봤습니다.

구성

기본적인 VPC Endpoint 구성은 아래 블로그와 동일하게 설정하고 있습니다.

https://dev.classmethod.jp/articles/jw-aws-vpc-endpoint-ec2-s3-ecr-bedrock/

이번에 진행할 작업은 계정 A의 EC2 인스턴스에서 VPC Endpoint를 통해 계정 B의 S3와 ECR에 접근하는 것입니다.

testvpc-1

마지막으로 EC2에는 다음과 같은 정책을 포함한 IAM 역할을 할당합니다.

  • AmazonBedrockFullAccess
  • AmazonEC2ContainerRegistryReadOnly
  • AmazonS3ReadOnlyAccess

B 계정의 S3 설정

먼저 B 계정의 S3 정책을 편집합니다.

B 계정의 S3 버킷에서 A 계정의 접근을 허용하는 정책입니다.

핵심 역할: "A 계정의 EC2가 배포 스크립트와 설정 파일을 읽어갈 수 있도록 허용한다"는 권한입니다.
주요 권한: 버킷 내 파일 목록 보기(s3:ListBucket)와 파일 내용 읽기(s3:GetObject) 권한을 부여합니다.
범위: 버킷 자체와 버킷 내부의 모든 객체(/*)에 대해 권한을 부여해야 aws s3 sync 명령이 정상 작동합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountList",
            "Effect": "Allow",
            "Principal": {
                "AWS": "A계정의 IAM Role Arn"
            },
            "Action": "s3:ListBucket",
            "Resource": "B계정의 S3 Arn"
        },
        {
            "Sid": "AllowCrossAccountGet",
            "Effect": "Allow",
            "Principal": {
                "AWS": "A계정의 IAM Role Arn"
            },
            "Action": "s3:GetObject",
            "Resource": "B계정의 S3 Arn/*"
        }
    ]
}

B 계정의 ECR 설정

이어서 B 계정의 ECR 정책을 편집합니다.

B 계정의 특정 ECR 리포지토리에서 A 계정의 접근을 허용하는 정책입니다.

핵심 역할: "A 계정의 특정 IAM 역할(Role)이 우리 리포지토리에서 이미지를 가져가는 것을 허용한다"는 명시적 허가입니다.
주요 권한: 이미지 목록 확인, 이미지 데이터 주소 획득, 실제 이미지 다운로드 권한을 포함합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossAccountPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "A계정의 IAM Role Arn"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ]
    }
  ]
}

A 계정의 EC2에서 테스트

이제 A 계정의 EC2에서 테스트해 봅시다.

B 계정의 버킷에 업로드된 객체 리스트를 불러옵니다.

$ sudo aws s3 ls s3://B 계정 버킷명/
2026-03-05 03:35:36     185828 test.png

해당 객체를 다운로드합니다.

성공적으로 A 계정의 EC2에서 B 계정의 S3 버킷으로 접근한 것을 확인할 수 있습니다.

$ aws s3 sync s3://B 계정 버킷명 .
download: s3://B 계정 버킷명/test.png to ./test.png

이어서 ECR로 접근해 봅시다.

로그인에 성공한 것을 확인할 수 있습니다.

root@ip-xx-x-xxx-xx:~# aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded

리포지토리에 있는 이미지 하나를 pull해 봅시다.

이미지가 성공적으로 pull된 것을 확인할 수 있습니다.

root@ip-xx-x-xxx-xx:~# docker pull xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest

latest: Pulling from test
c8c69b69f929: Pull complete
073cbcfef663: Pull complete
a378f10b3218: Pull complete
c20157372e94: Pull complete
5f75f8a17f40: Pull complete
39fc6f0c5be2: Pull complete
Digest: sha256:xxxxxxxxxxxx
Status: Downloaded newer image for xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest

마무리

이번 블로그에서는 계정 A의 EC2 인스턴스에서 VPC Endpoint를 통해 계정 B의 S3와 ECR에 접근하는 구성을 실제로 검증해 보았습니다.

VPC Endpoint를 활용함으로써 인터넷 게이트웨이나 NAT Gateway를 거치지 않고도 AWS 서비스에 프라이빗 네트워크 경로로 안전하게 접근할 수 있으며, 여기에 Cross Account 정책을 결합하면 다른 계정의 리소스도 동일한 방식으로 안전하게 사용할 수 있습니다.

특히 이번 구성에서는 다음과 같은 포인트를 확인할 수 있었습니다.

  • VPC Endpoint를 통한 프라이빗 경로 기반 접근
  • S3 Bucket Policy를 이용한 Cross Account 읽기 권한 부여
  • ECR Repository Policy를 통한 이미지 Pull 권한 허용
  • EC2 IAM Role 기반의 최소 권한 접근 구조

이를 통해 배포 스크립트, 설정 파일, 컨테이너 이미지 등을 중앙 계정(B 계정)에서 관리하면서도, 실제 워크로드가 실행되는 서비스 계정(A 계정)에서 안전하게 사용할 수 있는 아키텍처를 구성할 수 있습니다.

이러한 패턴은 다음과 같은 상황에서 특히 유용합니다.

  • 멀티 계정 환경에서 공통 배포 아티팩트 관리
  • 컨테이너 이미지 중앙 레지스트리 운영
  • 인터넷 경로를 사용하지 않는 보안 중심 아키텍처 구성

멀티 계정 AWS 환경에서 보안성과 운영 편의성을 동시에 확보하기 위한 하나의 구성 패턴으로 참고가 되었기를 바랍니다.

この記事をシェアする

FacebookHatena blogX

関連記事