Infra(CI/CD 파이프라인) 구축 - 네트워크

Code_Builder·2026년 5월 15일
post-thumbnail

VPC 설정...
물론 EC2 인스턴스 및 인프라 설정을 하기전 제일 먼저 VPC를 설정 하긴했다

VPC도 VPC인데, 보안그룹 설정하여 어떤 서비스에 어떤 아이피 와 포트를 열어줄것인지에 대한 설정 생각보다 해야할것들이 많았다

VPC를 처음 설정하면 프라이빗, 퍼블릭이 자동으로 각 2개씩 나옴
지정을 안하고 사용하면 무작위로 선택되는 불상사가 벌어진다
확실히 삽질을 하면 발전을 한다

해당 프로젝트에서 지정을 안하고 하여, 하필 프라이빗(내부망)으로 네트웤이 설정되었고
이로 인해 Ec2 생성해놓고 퍼블릭으로 접속이 안되는 문제가 있었다


해결가능 한 방법으로는 다음과 같다는것을 찿아보고 알게됨
1) Terraform 을 사용하여 서브넷 ID를 변수로 고정하여 무작위로 선택하는거 방지가능
2) 네트워크 설정 > 기본값(설정 안 함) 을 미리 만들어준 퍼블릭 서브넷 ID로 지정
(물론 다른 방법이 더 있을 수있음)


우선 Terraform이 익숙하지 않아 2번으로 진행하여 각 인스턴스들의 퍼블릭IP 접속이 가능해짐

다만, 편리해지지만 여기서 가만히 생각해보니 몇가지 문제가 있을수 있다고 생각함
1) 벡엔드 EC2 인스턴스의 퍼블릭 IP로 다이렉트로 접근하면 무작위 API 호출과 같은 위협(디도스 등등)
2) 간접적으로 DB 노출(물론 보안그룹에서 1차로 막긴했음)
3) 22포트에 대한 접근으로 인한 관리자 권한 탈취 시도(물론 접근 IP 대역 막긴하면 되긴함)


해당 문제들을 해결하기위해 우선 벡엔드 EC2 인스턴스를 VPC 내부의 프라이빗으로 옮겨
외부에서 접근 막음
(물론 엔드유저와의 통신은 해야하기 떄문에 프론트엔드와 가능하도록 보안그룹에 설정함)


프론트엔드 EC2 인스턴스로 별도로 생성하고 퍼블릭 영역에 위치시키고, 벡엔드와의 통신(Http 통신)을 위해 80 포트와 22포트를 전부 개방
(물론 22포트는 중요하기 때문에 특정 IP 대역으로 통제해야하나, 편의상 오픈함.
오픈해도 별 문제가 없는게 Pem 파일만 잘 지키면 상관없긴함)

  • 프론트 보안그룹 설정

--

벡엔드 Ec2인스턴스의 보안그룹에는 각각의 팀원들이 DB에 접근해야하기에
Mysql 포트인 3306에 대한 접근을 허용함(팀원들 공인 IP 대역으로만 제한)

또한 벡엔드가 프라이빗 영역으로 옮겼으니 벡엔드 EC2 인스턴스와 DB 통신을 위해
3306에 대해 벡엔드의 프라이빗 IP 대역도 허용해줌
(처음에 이거 설정 안해서 DB 연결이 안되어 문제가 있었음)

마찬가지로 22포트에 대해 편의상 모든 대역에서 접근가능하도록 함

제일 중요한 프론트엔드와의 통신을 위해 벡엔드 포트인 8080에 대해 프론트엔드의 보안그룹 전체를 지정해줌(마찬가지로 이거 안해줘서 프론트엔드에서 API 호출시 타임아웃나서 헤맸음..)
=>
Infra(AWS) 구축 - 프론트엔드 글의 Nginx 설정 파일에서 벡엔드 프라이빗 IP를 입력을 해뒀을텐데 뒤에 포트도 명시를 해줬다 그렇기에 프론트엔드가 가지고 있는 전체 보안그룹에 대해 허용함(대역 열어줌)

같은 VPC 내부에 있기 때문에 프라이빗 서브넷이라고 할지라도 Nginx가 리버스 프록시 과정을 거쳐 벡엔드 프라이빗 IP 호출 가능

  • 리버스 프록시
    - 누가 응답했는지(서버의 주소를 몰라도됨) 모름 ex) Nginx
  • 프록시
    - (서버 입장에서)누가 요청했는지 모름 ex) Vpn

  • 벡엔드 보안그룹 설정

이렇게 설정을 하고 프론트엔드 퍼블릭IP로 접속해서 통신을 하니 정상적으로 200 혹은 400이 되었다~!


도식화

(해당 이미지 내부의 IP는 가상IP이며, 생성형 AI(Gemini)를 통해 생성하였습니다)

profile
사소한일에도 최선을 다하기

0개의 댓글