네트워킹
- 전세계 컴퓨터를 연결하여 서로 통신할 수 있도록 하는 방법
- 네트워킹을 위해 필요한 3가지 요소
- 페이로드: 편지 내용
- 주소: 보낸 사람과 받는 사람
+ p.s) text는 트래픽을 감소시키기위해 gzip을 활용해서 압축/해제를 진행
IP주소
- 정의: 메시지를 특정 위치로 올바르게 라우팅하기 위한 주소
- 주소: 8비트(0~255) x 4 = 32비트
- CIDR 표기법: /뒤에 숫자 비트만큼 앞에 비트를 고정시키고, 뒤에 비트를 유동적으로 바꾸도록 하는 표기법
즉, 위 표기법에서는 총 256( 2^8 )의 IP주소를 제공 가능하다
RFC 1918
주소에 대한 규약 - private ip할당 규악
- 10.0..0.0 - 10.255.255.255 (10/8 prefix)
- 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
- 192.168.0.0 - 192.168.255.255 ( 192.168/ 16 prefix )
DNS 통신 흐름
서브넷
- 정의: 하나의 네트워크를 논리적인 영역으로 나눈 하위 네트워크
- 구성: IP 주소 = 네트워크 주소 + 호스트 주소
- 네트워크 주소: 큰 방의 주소
- 호스트 주소: 그 네크워크 안에서의 작은 방들의 주소
- 서브넷 마스크: 서브넷을 나누기 위한 도구 = IP 주소에서 네트워크 부분과 호스트 부분을 구분하는 역할
- 예: 255.255.255.0 서브넷 마스크 = 네트워크 부분 24비트 + 호스트 부분 8비트
AWS VPC
공인 IP의 갯수엔 한계가 있고, 외부에서 불리길 꺼려하는 친구들도 있기 때문에 (보안상 취약) 사설 IP(학급 번호)가 필요한 것입니다 (VPC가 필요한 이유와 동일)
- VPC는 나만의 네트워크 공간을 만들고, 그 내부를 프라이빗과 퍼블릭 공간으로 나누어 서버나 데이터를 안전하게 보호하고, 필요한 경우에만 외부와 연결할 수 있도록 관리하는 가상 네트워크
배경
옛날에는 그냥 ec2를 생성하면 한 네트워크에 랜덤하게 배치
위처럼 구성하면 여러개의 인스턴스를 올릴 때 아래의 고민이 발생
- 어떻게 애플리케이션 중 일부는 퍼블릭하게 연결하고, 일부는 프라이빗하게 연결할 것인가?
- 동일한 IP 범위로 클라우드를 어떻게 확장할 것인가?
서브넷 설정
그래서 나만의 가상 사설 네트워크를 할당 받고, 그 안에서 서브넷을 통해 네트워크망을 분리하자!
- VPC의 IP 대역: 10.0.0.0/16 = 앞의 16비트를 네트워크 주소로 설정.
- 즉, 나머지 16비트의 호스트 주소(10.0.0.0 ~ 10.0.255.255)는 같은 네트워크에 속함
- 퍼블릿 서브넷 IP 대역: 10.0.0.0/24 = 앞의 24비트를 네트워크 주소로 설정
- 즉, 나머지 8비트의 호스트 주소(10.0.0.0 ~ 10.0.0.255)는 같은 퍼블릭 서브넷에 속함
- 프라이빗 서브넷 IP 대역: 10.0.1.0/24 = 앞의 24비트를 네트워크 주소로 설정
- 즉, 나머지 8비트의 호스트 주소(10.0.1.0 ~ 10.0.1.255)는 같은 프라이빗 서브넷에 속함
예약된 IP 주소
총 5개의 IP 주소를 에약
VPC의 IP 대역: 10.0.0.0/16
- 첫번째 주소: 10.0.0.0 -> 네트워크 주소
- 두번째 주소: 10.0.0.1 -> AWS VPC 가상 라우터 주소
- 세번째 주소: 10.0.0.2 -> AWS DNS 서버 주소
- 네번째 주소: 10.0.0.3 -> 향후 사용
- 마지막 주소: 10.0.0.255 -> 네트워크 브로드캐스트 주소
라우트 테이블과 IGW(Internet Gateway)
라우트 테이블
- VPC를 생성하면 자동으로 가상 라우터가 생성
- 이 가상 라우터가 라우트 테이블을 가지고 있음
- 정의: 라우트 테이블은 트래픽의 전송 방향을 결정하는 라우트 관련 규칙을 저장하는 테이블
IGW
- 정의: VPC와 인터넷 간의 연결을 해주는 통로 = VPC에서 인터넷으로 나가는 관문
- p.s) 프라이빗 서브넷이 맵핑되어 있는 라우트 테이블에서는 인터넷 게이트웨이 설정이 없음
흐름
- 퍼블릿 서브넷의 EC2 인스턴스가 외부 인터넷과 통신하기 위해 데이터를 가상 라우터로 전달
- 가상 라우터는 테이블을 참고하여 인터넷 게이트웨이로 향하는 라우트 경로 확인 및 데이터 전송
- 인터넷 구간을 통해 사용자에게 연결
NAT(Network Address Translation) Gateway
- 정의: 프라이빗 IP를 퍼블릭 IP로 변환하여 외부 인터넷에 접속할 수 있게 해주는 장치
- 역할:
- 프라이빗 IP를 공용 IP로 변환
- 단방향 연결: 프라이빗 -> 외부 인터넷 통신 방향만 가능 ( 반대 불가능 )
- 목적:
- SW업데이트: 프라이빗 서브넷의 인스턴스에서 업데이트가 필요할 때
- 외부 API 호출: 프라이빗 서브넷의 인스턴스가 외부 API를 호출할 때
VPC 만드는 단계
- IP 주소 범위 선택
- 가용영역별 서브넷 설정
- 인터넷으로 향하는 경로 만들기 ( 라우팅 테이블 설정 )
- VPC로부터 트래픽 설정 ( 방화벽 설정 ) - 인바운드
vpc 네트워크 보안
네트워크 엑세스 제어 목록(ACL)
- 정의: 서브넷 단위로 작동하는 보안 그룹
- 특징: stateless
- 요청과 응답을 따로 처리한다는 의미 = 요청이 허용되었다고 해도 그 응답이 자동으로 허용되는게 아님
- 요청과 응답에 대해 각각 규칙을 설정해야함
보안그룹(Security Group)
- 정의: 인스턴스 단위로 작동하는 보안 그룹
- 특징: stateful
- 요청이 허용되면 그에 대한 응답은 자동으로 허용
VPC 고가용성을 위한 구성
- 고가용성이란?: 서비스가 중단 없이 계속 운영될 수 있도록 하는 것
- 한 쪽에 장애가 발생하면 다른 쪽에서 서비스를 할 수 있도록 하는 것 ( master - slave )
- how?: vpc내에 2개 가용영역에 각각 2개의 퍼블릭, 프라이빗 서브넷을 배치 (2 AZ, 4 subnet)
VPC peering
- **온프레미스 네트워크**(왼쪽)와 **VPC**(오른쪽)를 연결하는 방식으로, 두 가지 옵션이 있습니다:
1. **VPN**: 인터넷을 통해 암호화된 터널을 이용해 온프레미스 네트워크와 AWS VPC를 연결합니다.
2. **Direct Connect**: 전용 회선을 통해 더 안정적이고 고속의 연결을 제공합니다.
하지만 VPN방식은 양방향 IPSec 보안 프로토콜을 사용해 암호화해서 느림 -> 전용회선 쓰자!
- 온프레미스 네트워크의 주소 공간(예: `192.168.0.0/16`)을 AWS VPC의 주소 공간(예: `172.31.0.0/16`)에 연결하는 과정을 보여줍니다.
- **Customer Gateway**(온프레미스 측 라우터)와 **Virtual Gateway**(AWS 측 라우터) 간에 두 개의 **IPSec 터널**이 설정됩니다. 이 터널들은 인터넷을 통해 양쪽 네트워크 간 데이터를 안전하게 암호화하여 전송하는 역할을 합니다.
- "Your networking device"는 고객이 사용하는 네트워크 장비를 의미하며, VPN 연결 설정 시 중요한 요소입니다.
SSH 터널링
- 정의: public subnet에 있는 Bastion Host를 통해 Private Host로 접속하는 방법
- Bastion Host: 퍼블릭 IP 주소를 가진 인스턴스를 통해, 내부 퍼블릭 IP가 없는(프라이빗 IP만 있는) 인스턴스에 접근하도록 도와주는 문지기
명령어 구조
네트워크 최종!
- VPC: AWS 클라우드에서 가상 사설 네트워크 범위를 설정
- IGW를 통해 내부(서브넷 범위)의 요청이 아닌 외부의 요청을 양방향으로 연결
- Public 라우팅 테이블에 IGW를 저장
- NAT 게이트웨이를 통해 프라이빗 서브넷에서 외부로 나가는 요청을 단뱡향으로 연결
- Elastic IP 주소를 할당받아 외부로 요청을 보낼 수 있게 설정
- NAT 게이트웨이는 public 서브넷에 위치시키고
- Private 라우팅 테이블에 NAT를 저장
- 라우터: 이렇게 설정한 라우팅 테이블 정보를 기반으로, 라우터를 통해 요청을 적절한 위치로 전송
- NACL: 서브넷 수준에서 네트워크 트래픽을 제어하는 인바운드와 아웃바운드 규칙을 설정합니다. ( 인가 과정 )
- Security Group: 인스턴스 수준에서 네트워크 트래픽을 제어하는 인바운드와 아웃바운드 규칙을 설정합니다. ( 인가 과정 )
이러한 과정을 통해 VPC내 외부 사용자와의 상호작용은 퍼블릿 서브넷의 인스턴스로만 소통하고, 프라이빗 서브넷의 인스턴스들은 VPC 내의 인스턴스들을 통해서만 접근 가능하게 설정할 수 있음 ( 보안성 )
또한,프라이빗 서브넷의 인스턴스에서 SW업데이트나 외부API요청이 필요할 때 NAT 게이트웨이를 통해 이용할 수 있다.
참고
https://www.youtube.com/watch?v=R1UWYQYTPKo
https://velog.io/@yenicall/AWS-VPC의-개념
[AWS] VPC의 개념
1. Virtual Private Cloud (VPC) 개념 ✅ Amazon VPC AWS(Amazon Web Services)의 전체 인프라스트럭처는 보안 시설로서 클라우드에서 실행되는 사용자의 모든 자원은 높은 보안성을 보장받을 수 있다. 이는 기본
velog.io