프라이빗 환경에서 AWS 클라우드 리소스를 관리하는 방법은
실무/운영환경에서 ""필수""이다.
프라이빗 환경은 외부 인터넷과 분리되어, 특정 기업이나 사용자만 접근할 수 있는 독립된 클라우드 인프라 환경이다.
외부 인터넷으로 프라이빗 환경 리소스에 접근이 불가능하여, 보안상 민감한 정보들을 주로 프라이빗 환경으로 관리한다.
이전 포스팅에서, VPC에 대한 기본 개념과 서버 보안을 위한 프라이빗 환경으로 리소스를 분리하여
관리하는 전략에 대한 여러 전략들을 소개했다.
[AWS] VPC로 클라우드 리소스 보호하기
클라우드 자원 (AWS, GCP, Microsoft Azure 등)을 활용해서,서비스 배포환경(웹/앱 서버 & 백엔드 서버)를 쉽고 간편하게 구성할 수 있다.이와 같은 서비스를 "클라우드 호스팅" 서비스라고 한다.대표적
ceo-uk22.tistory.com
이번 포스팅은 여러 전략 중 하나인, Bastion Host 기반 Private EC2 구축방법을 소개한다.
VPC 생성
AWS 콘솔 -> VPC -> VPC 생성을 클릭한다.
VPC IPV4 CIDR 블록은 10.0.0.0/16 또는 192.168.0.0/16 추천한다.
너무 좁게 할당하면 나중에 서브넷 추가가 어렵기 때문이다.
CIDR은 충돌 방지를 위해 조직 내에서 일관되게 설계한다.
서브넷 생성
서브넷은 VPC 내부에 특정한 공간을 할당하여 리소스들을 독립적으로 관리할 수 있다.
외부 인터넷과 연결이 필요한 리소스이면, 퍼블릭 서브넷
외부 인터넷 연결이 불필요한 리소스이면, 프라이빗 서브넷으로 각각 서브넷을 분리시킨다.
예를들어, 프론트 서버는 퍼블릭 서브넷 백엔드 서버 & RDS는 프라이빗 서브넷에 위치한다.
AWS 콘솔 -> VPC -> 서브넷 탭 -> 서브넷 생성
서브넷은 기본적으로 VPC 내부에서 생성되기에, VPC CIDR의 영향을 받는다.
서브넷 CIDR 블록은 리소스에 따라 일관되게 구성한다.
예를 들면 아래와 같다.
Bastion Host | Public | 172.31.0.0/24 |
프론트 서버 | Public | 172.31.0.1/24 |
백엔드 서버 | Private | 172.31.0.10/24 |
RDS | Private | 172.31.0.30/24 |
Bastion Host, 프론트 서버 서브넷은 0.0 & 0.1 대역
백엔드 서버 서브넷은 0.10 대역
RDS 서브넷은 0.30 ~ 대역
(RDS 서브넷 대역폭은 향후 멀티 클러스터 확장운영을 대비해 CIDR 대역폭을 여유롭게 설계)
Private EC2 생성
기본적인 인스턴스 설정, 인스턴스 이름 / AMI / 인스턴스 유형 / 키페어 프로덕트 환경에 맞춰 설정한다.
네트워크 설정에서 Private EC2 환경을 설정하기 위한 몇가지 설정이 필요하다.
1. VPC 설정
동일한 대역폭 환경으로 설정된 VPC로 지정한다.
(VPC 내부의 여러 리소스들은 별도의 호스팅없이,
프라이빗 IP로 프라이빗한 서버 통신체계를 지원한다.)
2. 서브넷 설정
Private 환경으로 생성해둔, 프라이빗 서브넷을 연결한다.
Bastion Host | Public | 172.31.0.0/24 |
프론트 서버 | Public | 172.31.0.1/24 |
백엔드 서버 | Private (해당 서브넷) | 172.31.0.10/24 |
RDS | Private | 172.31.0.30/24 |
3. 퍼블릭 IP 자동 할당
Private 환경은 ""비활성화""로 설정한다.
외부 인터넷과 연결이 제한되며, IGW (인테넷 게이트웨이) 연결되지 않는다.
4. 보안그룹 설정
프라이빗 환경이므로, 인바운드 규칙은 설정하지 않고,
아웃바운드 규칙만 모든 포트에 대해 0.0.0.0/0으로 허용한다.
(인바운드 규칙은 Bastion Host, RDS, VPC 엔드포인트 연결 시 커스텀 보안그룹으로 추가하여 설정한다.)
Private EC2 - RDS 연결
AWS 콘솔에서 EC2 - RDS 리소스 간 송신할 수 있도록 설정할 수 있다.
1) AWS 콘솔 -> RDS -> 데이터베이스 작업 -> EC2 연결설정
2) RDS와 연결대상 Private EC2 인스턴스를 선택
3) EC2 보안그룹에 변경되는 보안그룹을 확인 후, 적용
프라이빗 리소스 접근용, Bastion Host 생성
Bastion Host는 프라이빗 환경에 등록된 리소스들에 접근하기 위한 관리자용 호스팅 서버이다.
위치: VPC (Private EC2가 속한)
서브넷: 퍼블릭 서브넷
퍼블릭 서브넷에 위치하여 외부 인터넷 접근이 가능하다.
관리자는 SSH로 Pem 혹은 Pub 키 기반으로 Bastion Host 접근하며,
Bastion Host에서 Private EC2로 Private IP 로 최종 프라이빗 리소스에 접근하게 된다.
Bastion Host EC2 인스턴스 생성 가이드는 아래와 같다.
1. VPC 설정
Private EC2 인스턴스가 위치한 VPC로 지정한다.
2. 서브넷 설정
Public 환경으로 생성해둔, 퍼블릭 서브넷을 연결한다.
Bastion Host | Public (해당 서브넷) | 172.31.0.0/24 |
프론트 서버 | Public | 172.31.0.1/24 |
백엔드 서버 | Private | 172.31.0.10/24 |
RDS | Private | 172.31.0.30/24 |
3. 퍼블릭 IP 자동 할당
""활성화""로 설정한다.
외부 인터넷과 연결되어, IGW (인테넷 게이트웨이)가 활성화된다.
4. 보안그룹 설정
인바운드 규칙은 SSH 포트 (22)에 인가된 관리자 IP에 대해 허용한다.
아웃바운드 규칙만 모든 포트에 대해 0.0.0.0/0으로 허용한다.
Private EC2 보안그룹 추가 (Bastion Host 접근허용)
Bastion Host에서 Private EC2로 접근가능하게 인바운드 규칙에 Bastion Host 포트를 허용해준다.
이때, 유형은 SSH이며, 소스는 ""Bastion Host 보안그룹""으로 설정한다.
(IP 화이트 리스트로 관리 중인 모든 IP에 대해 SSH 접근허용)
Bastion 기반 Private EC2 "SSH 접근"
1. 터미널 CLI에서 PEM 키페어 키 파일로 Bastion Host 접근시도
위와 같이 ec2-user@~~ Bastion Host에 접속성공했다.
2. Bastion Host에서 PEM 키페어 키 파일 저장 후, Private EC2 접근시도
최종 로컬에서 관리자용 Bastion Host를 거쳐, Private EC2에 접근을 성공했다.
Public EC2 인스턴스에서 Private EC2 인스턴스로 마이그레이션 작업을 수행하였다.
보안상의 리스크 측면으로 본 작업을 진행하였고, 그 결과, 외부 인터넷에서 접근하지 못하는 독립적인 인프라를 구축할 수 있었다.
Bastion Host 개발자용 접근 방식 분리부터, 프라이빗 서브넷 환경에서 CI/CD 자동화 배포 파이프라인 구축하는 방법을
이어서 업데이트할 예정이다.
'백엔드 개발' 카테고리의 다른 글
[AWS] 서버 보안 : 팀원의 EC2 접근, 어떻게 열어줘야 할까? (0) | 2025.03.28 |
---|---|
[AWS] VPC로 클라우드 리소스 보호하기 (2) | 2025.03.16 |
[CI/CD] AWS EC2 자동화 배포 파이프라인 구축하기 (0) | 2025.01.25 |
[개인 스터디] NestJS 정복하기 #07 - 커스텀 Pipe 구현 (0) | 2022.10.30 |
[개인 스터디] NestJS 정복하기 #06 - Pipe 사용법 (0) | 2022.10.29 |