1. 실습 목표
- Private Subnet의 EC2에서 NAT Gateway 없이 S3 접근 확인
- S3 Gateway Endpoint 생성
- Route Table 연동 확인
- Endpoint Policy 적용 확인
2. 실습 환경
구성
- VPC 1개
- Public Subnet 1개
- Private Subnet 1개
- Public EC2 1대
- Private EC2 1대
- S3 Bucket 1개
- S3 Gateway Endpoint 1개
예시 네트워크
- VPC:
10.10.0.0/16 - Public Subnet:
10.10.1.0/24 - Private Subnet:
10.10.2.0/24
3. 사전 준비
- 서울 리전 사용
- Public EC2 생성
- Private EC2 생성
- Private EC2에 IAM Role 연결
AmazonS3ReadOnlyAccess또는AmazonS3FullAccess
- S3 Bucket 생성
- Bucket 안에 테스트 파일 업로드
예시 파일명
sample.txt
예시 내용
gateway endpoint test
4. VPC 및 서브넷 구성
4.1 VPC 생성
VPC 생성
Name: lab-vpc
CIDR: 10.10.0.0/16
4.2 Public Subnet 생성
Name: lab-public-subnet
CIDR: 10.10.1.0/24
4.3 Private Subnet 생성
Name: lab-private-subnet
CIDR: 10.10.2.0/24
4.4 Internet Gateway 생성 및 연결
Internet Gateway 생성 후 lab-vpc에 연결
4.5 Route Table 생성
Public Route Table
Name: lab-public-rt
라우트 추가
0.0.0.0/0 → Internet Gateway
Public Subnet 연결
Private Route Table
Name: lab-private-rt
주의사항
- NAT Gateway 연결하지 않음
0.0.0.0/0경로 넣지 않음
Private Subnet 연결
5. EC2 생성
5.1 Public EC2 생성
설정 예시
Name: bastion-ec2
Subnet: lab-public-subnet
Public IP: Enable
보안 그룹
- SSH 22: 내 공인 IP 허용
5.2 Private EC2 생성
설정 예시
Name: private-ec2
Subnet: lab-private-subnet
Public IP: Disable
IAM Role: AmazonS3ReadOnlyAccess
보안 그룹
- SSH 22: Public EC2 보안 그룹 허용
6. S3 Bucket 생성
S3 Bucket 생성
예시 이름
이니셜-gateway-endpoint-lab
파일 업로드
sample.txt
7. Public EC2에서 Private EC2 접속
7.1 Public EC2 접속
ssh -i mykey.pem ec2-user@<Public-EC2-Public-IP>7.2 Private EC2 접속
ssh -i mykey.pem ec2-user@<Private-EC2-Private-IP>8. AWS CLI 확인
Private EC2에서 실행
aws --version설치되지 않은 경우
Amazon Linux 2023
sudo dnf install awscli -yUbuntu
sudo apt update
sudo apt install awscli -y버전 확인 다시 실행
aws --version9. Endpoint 생성 전 S3 접근 확인
Private EC2에서 실행
aws s3 ls또는
aws s3 ls s3://이니셜-gateway-endpoint-lab예상
- 응답 지연
- 연결 실패
- timeout 발생 가능
이 상태를 먼저 확인해둠.
10. S3 Gateway Endpoint 생성
10.1 콘솔 이동
VPC → Endpoints → Create endpoint
10.2 Endpoint 설정
Name tag
lab-s3-gateway-endpoint
Service category
AWS services
Service name 검색
s3
서울 리전 예시
com.amazonaws.ap-northeast-2.s3
VPC 선택
lab-vpc
Endpoint type
Gateway
10.3 Route Table 선택
반드시 Private Subnet이 연결된 Route Table 선택
lab-private-rt
10.4 Policy
처음에는 기본 정책 사용
Full Access
10.5 Endpoint 생성
생성 후 상태가 Available인지 확인
11. Route Table 확인
콘솔 경로
VPC → Route Tables → lab-private-rt → Routes
확인 항목
- local 경로 존재
- S3 관련 Prefix List 경로 자동 추가됨
- target이 VPC Endpoint로 표시됨
예시 형태
Destination: pl-xxxxxxxx
Target: vpce-xxxxxxxx
12. Endpoint 생성 후 S3 접근 테스트
Private EC2에서 다시 실행
12.1 버킷 목록 조회
aws s3 ls12.2 특정 버킷 조회
aws s3 ls s3://이니셜-gateway-endpoint-lab예상 출력 예시
2026-04-01 12:10:00 22 sample.txt12.3 파일 다운로드
aws s3 cp s3://이니셜-gateway-endpoint-lab/sample.txt .12.4 다운로드 확인
cat sample.txt예상 출력
gateway endpoint test
13. Endpoint Policy 제한 실습
13.1 Endpoint 선택
VPC → Endpoints → lab-s3-gateway-endpoint
13.2 Policy 수정
기존 정책을 아래처럼 수정
{
"Statement": [
{
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::이니셜-gateway-endpoint-lab",
"arn:aws:s3:::이니셜-gateway-endpoint-lab/*"
]
}
]
}저장
13.3 허용된 버킷 테스트
aws s3 ls s3://이니셜-gateway-endpoint-labaws s3 cp s3://이니셜-gateway-endpoint-lab/sample.txt .13.4 다른 버킷 접근 테스트
aws s3 ls s3://다른-버킷명예상
AccessDenied
또는 권한 거부 메시지 확인
14. CLI로 Endpoint 생성 실습
콘솔 실습 후 CLI로도 생성 가능함.
aws ec2 create-vpc-endpoint \\
--vpc-id vpc-xxxxxxxx \\
--service-name com.amazonaws.ap-northeast-2.s3 \\
--vpc-endpoint-type Gateway \\
--route-table-ids rtb-xxxxxxxx각 항목
--vpc-id: Endpoint를 생성할 VPC ID--service-name: 연결할 서비스 이름--vpc-endpoint-type Gateway: Gateway Endpoint 지정--route-table-ids: 연결할 Route Table 지정
생성 후 조회
aws ec2 describe-vpc-endpoints15. 확인용 명령어 정리
Private EC2에서 자주 사용하는 명령
aws sts get-caller-identity현재 IAM Role 확인용
aws s3 ls버킷 목록 조회
aws s3 ls s3://이니셜-gateway-endpoint-lab특정 버킷 조회
aws s3 cp s3://이니셜-gateway-endpoint-lab/sample.txt .파일 다운로드
cat sample.txt파일 내용 확인
16. 트러블슈팅
16.1 S3 접근이 계속 안 되는 경우
확인 항목
- Private EC2에 IAM Role 연결했는지 확인
- IAM Role에 S3 권한 있는지 확인
- Private Subnet이
lab-private-rt를 사용 중인지 확인 - Gateway Endpoint가
lab-private-rt에 연결됐는지 확인 - Endpoint 상태가
Available인지 확인 - Endpoint Policy가 너무 제한적이지 않은지 확인
16.2 EC2에 Role이 붙었는지 확인
aws sts get-caller-identity정상적으로 계정 정보가 나오면 Role 자격 증명 사용 중인 상태임.
16.3 Route Table 잘못 연결한 경우
자주 하는 실수
- Public Route Table만 선택함
- Private Subnet이 다른 Route Table을 사용 중임
반드시 Private EC2가 속한 Subnet의 Route Table 확인 필요
17. 실습 종료 후 삭제
삭제 순서
- VPC Endpoint 삭제
- S3 객체 삭제
- S3 Bucket 삭제
- EC2 인스턴스 종료
- Route Table 정리
- Subnet 삭제
- Internet Gateway 분리 및 삭제
- VPC 삭제