(AWS CodeDeploy) NAT를 사용하여 퍼블릭 IP 없는 프라이빗 서브넷의 EC2 인스턴스에서 CodeDeploy 환경 구성하기
AWS 환경에서 보안 강화를 위해 EC2 인스턴스를 프라이빗 서브넷에 배치하는 경우가 많습니다. 하지만 이 경우, 해당 인스턴스는 인터넷과 직접 통신할 수 없으므로 CodeDeploy와 같은 AWS 서비스와 연동하려면 별도의 설정이 필요합니다. 본 블로그에서는 NAT 게이트웨이를 사용하여 퍼블릭 IP 없는 프라이빗 서브넷의 EC2 인스턴스에서 AWS CodeDeploy 환경을 구성하는 방법을 단계별로 설명합니다.
1. 아키텍처 개요
본 가이드에서는 다음과 같은 구성으로 환경을 설정합니다:
- 퍼블릭 서브넷: 인터넷 게이트웨이(IGW)와 연결된 NAT 게이트웨이가 위치함.
- 프라이빗 서브넷: 퍼블릭 IP 없이 배포된 EC2 인스턴스가 위치함.
- NAT 게이트웨이: 프라이빗 서브넷의 EC2가 인터넷과 통신할 수 있도록 지원함.
- IAM 역할: EC2 인스턴스가 S3 및 CodeDeploy와 통신할 수 있도록 필요한 권한을 부여함.
- AWS CodeDeploy: 애플리케이션을 자동 배포하는 서비스.
(참고) AWS CodeDeploy 사용법은 링크된 블로그를 참고하세요(https://backend-java.tistory.com/49)
8.9.가. AWS CodeDeploy를 이용한 EC2 인스턴스 배포 구성 및 실행 방법
1. 개요AWS CodeDeploy는 EC2 인스턴스, 온프레미스 서버, Lambda 및 ECS 등의 환경에서 애플리케이션을 자동으로 배포할 수 있는 서비스입니다. 이 글에서는 CodeDeploy를 활용하여 EC2 인스턴스에 애플리케
backend-java.tistory.com
2. VPC 및 서브넷 구성
1) VPC 생성
먼저, VPC를 생성합니다.
- AWS 콘솔에서 VPC 서비스로 이동합니다.
- 새 VPC를 생성하고 CIDR 블록을 10.0.0.0/16으로 설정합니다.
2) 퍼블릭 서브넷 생성
- 퍼블릭 서브넷을 생성합니다. (예: 10.0.1.0/24)
- **인터넷 게이트웨이(IGW)**를 생성하고 VPC에 연결합니다.
- 퍼블릭 서브넷의 라우팅 테이블을 수정하여 0.0.0.0/0 트래픽을 IGW로 향하게 설정합니다.
3) 프라이빗 서브넷 생성
- 프라이빗 서브넷을 생성합니다. (예: 10.0.2.0/24)
- 라우팅 테이블을 기본값으로 유지합니다.
3. NAT 게이트웨이 설정
1) 퍼블릭 서브넷에 NAT 게이트웨이 생성
- AWS 콘솔 → VPC → NAT 게이트웨이로 이동합니다.
- 퍼블릭 서브넷을 선택하고 **Elastic IP(EIP)**를 할당하여 NAT 게이트웨이를 생성합니다.
2) 프라이빗 서브넷의 라우팅 테이블 수정
- 라우팅 테이블에서 프라이빗 서브넷에 대한 테이블을 선택합니다.
- 새 라우트 추가:
- 대상: 0.0.0.0/0
- 대상 게이트웨이: NAT 게이트웨이
4. IAM 역할 추가 및 EC2 설정
1) IAM 역할 생성
EC2 인스턴스가 CodeDeploy 및 S3와 통신하려면 IAM 역할이 필요합니다.
- AWS 콘솔 → IAM → 역할(Role) 생성
- EC2 서비스 선택
- 다음 정책 추가
- AWSCodeDeployFullAccess
- AmazonS3ReadOnlyAccess
- CloudWatchLogsFullAccess (로그 저장용)
- 역할을 생성한 후, EC2 인스턴스에 할당합니다.
2) EC2 인스턴스 생성 및 CodeDeploy 에이전트 설치
- EC2 인스턴스를 프라이빗 서브넷에 배치
- SSH 또는 SSM 세션을 통해 접속 후 CodeDeploy 에이전트 설치:
sudo apt update -y
sudo apt install ruby wget -y
cd /home/ubuntu
wget https://aws-codedeploy-[region].s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
sudo systemctl enable codedeploy-agent
sudo systemctl start codedeploy-agent
- 설치 완료 후 상태 확인:
sudo systemctl status codedeploy-agent
5. CodeDeploy 배포 구성
1) CodeDeploy 애플리케이션 생성
- AWS 콘솔 → CodeDeploy → 애플리케이션 생성
- 배포 유형: EC2/온프레미스
- 배포 그룹 생성:
- EC2 태그 기반으로 프라이빗 서브넷의 인스턴스 선택
- IAM 역할 연결
2) S3에 애플리케이션 업로드 및 배포 실행
- 로컬에서 애플리케이션 패키징:
zip -r app.zip .
- S3 버킷에 업로드:
aws s3 cp app.zip s3://your-bucket-name/
- CodeDeploy 배포 실행:
aws deploy create-deployment \
--application-name MyApp \
--deployment-group-name MyDeploymentGroup \
--s3-location bucket=your-bucket-name,key=app.zip,bundleType=zip
6. 트러블슈팅 및 최종 확인
1) CodeDeploy 로그 확인
vi /var/log/aws/codedeploy-agent/codedeploy-agent.log
2) NAT 게이트웨이 연결 확인
aws ec2 describe-nat-gateways
3) S3 접근 문제 해결
aws s3 ls s3://your-bucket-name/
7. 결론
이제 NAT 게이트웨이를 활용하여 퍼블릭 IP 없이 프라이빗 서브넷의 EC2 인스턴스에서 CodeDeploy를 통해 애플리케이션을 배포할 수 있습니다. 이를 통해 보안성을 유지하면서도 CodeDeploy 및 S3와 원활하게 통신할 수 있는 환경을 구성할 수 있습니다.
🚀 보안과 비용 절감을 고려하여 NAT 또는 VPC 엔드포인트를 적절히 선택하여 활용해보세요!