이전에 프로젝트를 진행하면서, AWS 아키텍처를 좀 더 정교하게 짜지 못해서 아쉽다고 생각했다. 그렇기에, 새로운 프로젝트를 들어가는 지금 AWS 아키텍처를 조금 더 공부해서 VPC - subnet - CICD 세가지를 추가로 적용해서 개발해보고자 한다. (추후에 Auto Scaling도 추가하고 싶다) 좀 더 공부해서 좋은 아키텍처를 기반으로 스프링 프로젝트를 진행해야지!!!!
AWS VPC
VPC란?
개념
- Virtual Private Cloud
- AWS 클라우드에서 논리적으로 격리된 공간을 프리비저닝하여 고객이 정의하는 가상 네트워크에서 AWS 리소스를 시작할 수 있다. IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있음.
- 가상 네트워크 센터!
💡 VPC는 하나의 사설 IP를 보유하고 있다. 여기 안에서 서브넷을 생성하여 사설 IP 대역 일부를 분배한다. 주로 회사마다 VPC가 있고, 그 회사 내에서 프로젝트별로 서브넷이 있는 구조!
종류
- Default VPC
- 계정 생성시 자동으로 셋업 되어 있음(모든 리전에)
- 모든 서브넷의 인터넷 접근이 가능함
- EC2가 퍼블릭 IP와 프라이빗 IP 모두 가지고 있음
- 삭제시 복구 불가
- Custom VPC
- 새로 만들어야 함
- private IP 만 가지고 있음
- Default VPC의 특징을 가지고 있지 않음
VPC로 할 수 있는 것들
- EC2 실행 가능
- 서브넷을 구성 가능
- 보안 설정(IP block, 인터넷에 노출되지 않은 EC2 구성 - 예시: DB) 가능
- VPC Peering 가능
- VPC간의 연결
- 원래대로면 자기네 EC2는 자기네 VPC 안에서만 연결할 수 있음
- 참고: Transitive Peering은 불가능! (중계 VPC 불가)
- VPC Flow Log: VPC의 로그를 CloudWatch에 저장 가능
- IP 대역 지정 가능
- 한 Region에 하나! (다른 Region으로 확장 불가능)
VPC의 구성 요소
- Availability Zone
- Internet Gateway
- Route Table
- NACL (Network Access Control List)
- Security Group
- EC2
- subnet
- NAT gateway
- Bastion host
서브넷이란?
VPC내에 생성된 분리된 네트워크로, 하나의 AZ에 연결되어 있다.
VPC가 가지는 사설 IP 범위에서 서브넷을 쪼개서 사용한다.
EC2나 RDS는 이 서브넷 내에서 생성되고 사설 IP가 할당된다(private한 상태) 여기서 필요에 따라 공인 IP를 부여한다.
💡 **서브넷 중,
인터넷 게이트웨이로 라우팅 되는 경우 public Subnet이 된다.
인터넷 게이트웨이로 라우팅 되지 않는 경우, private Subnet이 된다.**
서브넷은 라우팅 테이블과 하나의 NACL을 가진다.
ENI(Elastic Network Interface) - EC2 level
VPC 내의 EC2 인스턴스에 붙는 가상 인터페이스를 의미한다.
VPC내의 리소스는 ENI와 사설 IP를 기본적으로 할당받는다.
StateFul!
:보안 그룹은 ENI에 설정되고, 인바운드를 허용해주면 아웃 바운드 포트들은 자동적으로 allow 처리가 된다.
NACL(Network Access Control List) - subnet level
서브넷 레벨의 접근 제어로, VPC 내부에 생성한 서브넷 네트워크에 대한 접근 제어를 해준다.
StateLess!
: 아웃바운드 규칙을 허용할지 거부할지 결정할 수 있음
NACL이 ENI 보안 그룹 규칙보다 더 우선된다.
라우팅 테이블
라우팅 테이블에는 0개 이상의 서브넷이 연결될 수 있으며, 서브넷은 최대 1개의 라우팅 테이블에만 연결할 수 있다.
라우팅 테이블을 따로 연결하지 않은 서브넷은 default 라우팅테이블에 비 명시적으로 연결된다고 한다.
예시1)
- 172.16.0.0/24: local로 연결된다(VPC 내부 통신을 위한 로컬 라우팅!) → 모든 라우팅 테이블에!
- 그 외 모든 목적지: internet gateway로 연결된다(이렇게 하면 public subnet이 되는 것 같다)
EC2등의 리소스가 외부 인터넷과 통신하고자 할 경우 조건
- Internet 통신하고자 하는 Resource가 공인 IP를 보유할 것
- Resource가 소속된 Subnet의 Routing Table에 ‘0.0.0.0/0’ 목적지로 갖는 Routing ‘Internet gateway’가 있을 것
- Network ACL과 Security Group 규칙에서 허용할 것
Public subnet VS Private subnet
- IGW와 연결된 라우팅 테이블에 연결된 서브넷: Public subnet
- IGW와 연결되지 않은 라우팅 테이블에 연결된 서브넷: Private subnet