본 글은 이전 글이었던 'https://veriperi-dazzle.tistory.com/258'의 CICD BlueGreen 배포 구현 과정을 이어서 작성해보고자 한다. 이번에는 EC2 설정에 앞서 VPC 설정 과정에 대해 알아보자.
VPC 개념 간략히 정리
본격적으로 VPC를 설정하기에 앞서, VPC가 무엇인지 간단하게 알아보자.
VPC는 거미줄처럼 연결되어 있는 EC2 인스턴스들의 연결을 VPC라는 하나의 네트워크로 구성함으로써 각각의 인스턴스의 네트워크를 하나하나 설정해야하는 번거로움을 줄여줄 수 있다. 이렇게 설정된 각각의 VPC는 완전히 독립된 네트워크로 작동할 수 있다.
즉, VPC는 클라우드 환경을 퍼블릭과 프라이빗의 논리적으로 독립된 네트워크 영역으로 분리할 수 있게 해주는 역할을 한다.
▶ 서브넷
: VPC를 잘개 쪼개는 과정으로 IP 네트워크의 논리적인 영역을 부분적으로 나눈 하위 망을 말한다. 서브넷을 통해 네트워크 분리가 가능하다
→ 서브넷은 더 많은 네트워크 망을 만들기 위해 주로 사용한다.
- Public subnet : 인터넷을 통해 연결할 수 있는 리소스를 배치하기 위한 네트워크
- Private subnet : 인터넷으로 연결하지 않고 보안 유지를 위한 배타적인 연결에 사용되는 네트워크
- VPN only subnet : 기업의 데이터 센터와 VPC를 연결하는 데 사용되는 네트워크
📌 예시
서브넷은 도시에 있는 다양한 구역(서브넷)으로 나뉘어져 있는 아파트 단지처럼 볼 수 있다. 아파트 단지 전체는 VPC고, 구역 A는 인터넷에 연결된 구역(퍼블릭 서브넷), 구역 B는 외부와 차단된 보안 구역(프라이빗 서브넷), 구역 C는 특정 연결(예: 회사의 사내망)을 위해 존재하는 구역(VPN 전용 서브넷)이다.
▶ 라우팅 테이블과 라우터
: 라우터란 목적지이고 라우팅테이블은 각 목적지에 대한 이정표라고 할 수 있다. 따라서, 데이터는 라우터로 향하게되며 네트워크 요청은 각각 정의된 라우팅테이블에 따라 작동한다.
→ 예를 들어 서브넷 A의 라우팅 테이블이 172.31.0.0/16 즉 VPC안의 네트워크 범위를 갖는 네트워크 요청의 경우 로컬에서 찾을 수 있지만, 외부로 통하는 트래픽에 대해서는 처리가 불가능하다
📌 예시
라우팅 테이블과 라우터는 도로에서의 교차로 표지판과 비슷하다. 라우터는 교차로 역할을 하며, 라우팅 테이블은 표지판으로 각 차가 목적지까지 가는 올바른 방향을 알려준다.
▶ 인터넷 게이트웨이 (IGW)
: VPC와 Internet 간의 논리적인 연결이다. 간략하게 VPC에서 인터넷으로 나가는 관문이라고 생각할 수 있다.
→ 인터넷과 연결되어있는 서브넷을 퍼블릭 서브넷, 인터넷과 연결되어 있지않는 서브넷을 프라이빗 서브넷이라고 한다
📌 예시
인터넷 게이트웨이는 대문과 비슷하다. 대문은 집(프라이빗 공간)과 외부(공공 영역) 간의 출입문 역할을 하듯, 인터넷 게이트웨이는 VPC와 인터넷 간의 출입문 역할을 한다.
▶ 네트워크 ACL과 보안그룹
: 방화벽과 같은 역할을 하며 인바운드 트래픽과 아웃바운드 트래픽 보안 정책을 설정할 수 있다. IP 주소와 프로토콜 그리고 포트 번호를 통해 대상을 식별하고 제어 정책에 따라 대상의 허용 여부를 판단한다.
→ 네트워크ACL과 보안그룹이 충돌한다면 보안그룹이 더 높은 우선순위를 갖는다
📌 예시
네트워크 ACL은 아파트 단지 입구의 경비원처럼 아파트에 들어오거나 나가는 모든 사람을 통제한다. 반면 보안 그룹은 개별 아파트 문에 설치된 도어락처럼, 특정 집으로 들어가는 사람을 제어하는 방식이다.
▶ NAT 게이트웨이
: 인터넷 게이트웨이처럼 외부 인터넷과 연결하는 관문 역할을 하고 있다. NAT은 Network Address Translation의 약자로 네트워크 주소 즉, IP 주소를 변환해 주는 기술이다.
→ 인터넷은 공공 네트워크 구간으로 퍼블릭 IP를 통해 통신이 이루어진다. 이때, 프라이빗 IP로는 인터넷에 접근할 수 없는데, NAT 게이트웨이가 프라이빗 IP를 퍼블릭 IP로 변환하여 통신을 도울 수 있다.
📌 예시
NAT 게이트웨이는 회사에서 내선 번호를 외부로 전환해주는 비서와 유사하다. 직원(프라이빗 리소스)은 외부와 직접 통화할 수 없지만, 비서(NAT 게이트웨이)가 전화를 연결해줘서 외부와 소통할 수 있게 한다.
📂 참고자료
- [AWS] 가장쉽게 VPC 개념잡기
- [AWS] VPC의 개념
Step 1. VPC 생성
VPC 카테고리로 넘어가서 'VPC 생성'을 클릭한다
Subnet, Route, Table, IGW 등을 직접 설정하기 위해 'VPC Only'를 선택한다. 이름 태그는 자유롭게 설정하고 IPv4 CIDR 블록을 'IPv4 CIDR 수동 입력'을 선택하고 '10.0.0.0/16'으로 지정할 수 있다.
'Create VPC'를 클릭하면 위 이미지와 같이 VPC가 생성된 것을 확인할 수 있다.
Step 2. Subnet 생성
VPC 내에서 네트워크를 효율적으로 분리하고, 보안과 접근 제어를 강화하며, 리소스 관리를 최적화하기 위해 서브넷을 다음과 같이 생성할 수 있다.
'서브넷' 카테고리에서 '서브넷 생성'을 클릭하여 서브넷을 생성해줄 수 있다.
서브넷을 생성할 때 VPC는 앞서 생성한 VPC를 선택하고 서브넷 설정을 이어갈 수 있다.
먼저 첫번째 서브넷은 위와 같이 설정할 수 있다. 임의의 서브넷 이름을 작성하고, 가용 영역은 2a로 할당해주며, IPv4 서브넷 CIDR 블록은 '10.0.0.0/24'로 설정할 수 있다.
서브넷 1에 대한 설정이 완료되었다면 이후 ALB 생성 시 2개 이상의 서브넷을 필요로 하기 때문에 '새 서브넷 추가' 버튼을 클릭하여 서브넷을 하나 더 생성해주어야 한다. 이때, 가용 영역을 2c로 설정해주어야 하는데 그 이유는 다음과 같다.
📢 가용 영역을 a와 c로 설정해주어야 하는 이유
- 가용 영역 b와 d의 경우 지원하지 않는 EC2 인스턴스 유형이 있다.
- 서로 인접한 영역(a와 b)는 물리적으로 가까운 경우가 많아, 물리적 또는 네트워크 관련 장애가 발생할 때 그 영향을 받을 가능성이 상대적으로 크다.
- 특정 가용성 영역에 네트워크 장애, 전력 문제, 혹은 시스템 오류가 발생하면, 인접한 가용성 영역(b)이 영향을 받을 가능성이 있다. 하지만 a와 c처럼 더 멀리 떨어진 가용성 영역을 선택하면 광역 장애의 영향을 피할 수 있다.
📂 참고자료
- https://kimjingo.tistory.com/196
- https://brunch.co.kr/@topasvga/1627
- AWS - Availability zone 별 지원하는 EC2 instance 유형
'서브넷 생성' 버튼을 누르면 위와 같이 서브넷이 성공적으로 생성된 것을 볼 수 있다.
Step 3. Internet gateways 생성
앞서 생성한 VPC를 인터넷 즉, 외부와 통신시켜주기 위해 인터넷 게이트웨이를 생성하여 연결해주어야 한다.
'인터넷 게이트웨이' 탭에서 '인터넷 게이트웨이 생성'을 클릭하여 새 인터넷 게이트웨이를 생성해준다.
인터넷 게이트웨이 이름 설정한 후 '인터넷 게이트웨이 생성' 버튼을 클릭하여 인터넷 게이트웨이를 만들어줄 수 있다.
생성 직후 생성한 인터넷 게이트웨이에서 '작업'을 클릭하고 'VPC 연결'을 클릭해서 앞서 생성한 VPC를 연결해주는 과정이 필요하다.
앞서 생성한 VPC를 선택하고 '인터넷 게이트웨이 연결'을 클릭하면
위 이미지와 같이 인터넷 게이트웨이와 VPC가 잘 연결되었음을 볼 수 있다.
Step 4. Route table 생성
VPC 생성 과정에서 자동으로 생성된 Route table이 있으나, 앞서 생성한 인터넷 게이트 등과 연결한 새로운 Route table을 생성하여 VPC와 연결해주기 위해 새로운 VPC를 만들어볼 수 있다.
'라우팅 테이블' 탭에서 '라우팅 테이블 생성'을 선택한다.
라우팅 테이블의 이름을 원하는 대로 설정하고 VPC는 앞서 만든 'BlueGreen-bs-test'로 연결해준다. 이후 '라우팅 테이블 생성' 버튼을 눌러 라우팅 테이블을 만들어줄 수 있다.
생성된 라우팅 테이블의 '라우팅' 탭에서 '라우팅 편집'을 클릭하여 앞서 생성한 인터넷 게이트웨이와 연결을 해주어야 한다.
위와 같이 인터넷 게이트 연결 후 '변경 사항 저장' 버튼을 누른다.
다음으로 '서브넷 연결' 탭으로 이동하면 명지석 연결이 없는 서브넷에 이전에 생성한 2개의 서브넷을 볼 수 있다. 이를 '서브넷 연결 편집'을 선택하여 명시적 서브넷 연결이 되도록 변경해주어야 한다.
명시적 연결이 안되어있는 서브넷 2개를 선택하여 '연결 저장' 버튼을 누르면
위 이미지처럼 명시적 서브넷 연결 부분에 앞서 생성한 2개의 서브넷이 모두 연결된 것을 볼 수 있다.
이후 라우팅 테이블 페이지로 와서 앞서 생성한 라우팅 테이블에 대해 '기본 라우팅 테이블'로 설정해주어야 한다. 생성한 라우팅 테이블을 '기본 라우팅 테이블'로 설정했다면, 기존에 자동으로 생성된 라우팅 테이블을 지워줄 수 있다.
📌 기본 라우팅 테이블 설정을 하는 이유는??
기본 라우팅 테이블을 설정할 경우 새로 서브넷을 만들었을 때, 라우팅 테이블을 지정하지 않았다면, 기본 라우팅 테이블이 자동으로 적용되어 서브넷 간의 통신이나 외부와의 연결이 가능하다. 또한, 기본 라우팅 테이블이 없으면 트래픽 경로가 설정되지 않아 네트워크가 동작하지 않는 문제가 발생할 수 있다. 이처럼 기본 라우팅 테이블은 서브넷 간의 통신을 보장하고, 네트워크 트래픽의 경로를 쉽게 관리하며, 새롭게 생성된 서브넷이 자동으로 네트워크 경로를 갖도록 하기 위해서 설정해줄 수 있다.
이후 VPC로 이동하여 리소스 맵을 확인해보면 서브넷, 라우팅 테이블, 인터넷 게이트웨이가 위 이미지와 같이 잘 연결된 것을 확인할 수 있다.
Step 5. 보안 그룹 생성
라우팅 테이블 생성까지 해서 VPC와 관련된 설정은 모두 마무리되었다. 이제 EC2 인스턴스 생성에 앞서, 본 글의 마지막 설정 내용인 보안 그룹 생성에 대해 다뤄보려 한다.
보안 그룹의 경우 외부로부터 들어오는 요청을 받기 위해 사용 된다. 총 2개의 보안 그룹을 생성해야 하는데, 하나는 로드밸런서가 TCP 8080번 포트로 오는 요청 (HTTP 요청)을 받기 위함이고, 다른 하나는 EC2 인스턴스가 로드밸런서로부터 들어온 80번 요청만 받아서 처리하기 위함이다.
'보안 그룹' 페이지로 이동하여 '보안 그룹 생성'을 클릭한다.
첫번째 보안그룹은 위 이미지와 같이 설정할 수 있다.
두번째 보안그룹은 VPC를 연결한 후, 위 이미지와 같이 2개의 인바운드 규칙을 설정할 수 있다. 이때, TCP 요청의 경우 앞서 생성한 'BlueGreen LB SG-bs' 즉, 첫번째 보안그룹을 선택해줄 수 있다.
보안그룹까지 해서 VPC 생성 및 서브넷 설정이 완료되었다. 다음 글에서는 이를 활용하여 EC2 인스턴스를 생성하고 설정을 마친 후 실제 CodeDeploy를 통해 배포까지 진행하는 부분을 다뤄보려 한다.
'Cloud > AWS' 카테고리의 다른 글
[CI/CD] Blue/Green 무중단 배포 - EC2 (0) | 2024.09.18 |
---|---|
[CI/CD] Blue/Green 무중단 배포 - CodeBuild (3) | 2024.09.17 |
[Dreamhack] AWS의 보안 설정(2) (0) | 2024.09.09 |
[Dreamhack] AWS의 보안 설정(1) (0) | 2024.09.01 |
[Dreamhack] AWS Introduction (0) | 2024.08.26 |