AWS를 사용하는 이유는 cloud network를 사용하기 위함이다.
그리고 이를 자신의 서버 private network처럼 사용하기 위해서는
1) 어떻게 aws에서 private network를 구성할 것인가?
2) 어떻게 외부, 내부 사이의 연결을 할 것인가?
3) 이 모든 통신에서 보안설정을 어떻게 진행할 것인가? 를 설정해주는 것이 기본이다.
이것에 대해 알아보기 전에, 먼저 네트워크에서 필요한 사전 지식을 알아보자.
1. 네트워크 사전 지식
- OSI(Open System Interconnect) 7 layer 관점에서 본 Private Network:
네트워크는 물리적으로 다양한 네트워크 장비가 핵심이 되어 구성된다.
컴퓨터 네트워크 통신과 프로토콜 디자인을 계층을 두어 설명한 것이 OSI 7계층이다.
각각의 계층 별로 통신할 때, 전송을 위해 보는 관심사가 다르다.
private network를 사용할 때, 각각의 계층 별로 관심사와 네트워크 장비 등을 알아보자.
- L1 네트워크 : Physical Layer
- 말 그대로 물리적 계층이다 LAN선과 같은 장비들을 통해 연결된다.
이진수로 된 비트 신호를 단위로 한 통신 프로토콜을 설명할 때 사용 된다.
- 말 그대로 물리적 계층이다 LAN선과 같은 장비들을 통해 연결된다.
- L2 네트워크 : Data Link Layer
- Switch : 일반적인 Switch라 함은 L2 Switch를 말한다.
MAC 주소(물리주소; 네트워크 칩셋의 주소) 기반 통신을 전달하는 네트워크 장비이며 private 네트워크 간 연결에 사용된다.
- Switch : 일반적인 Switch라 함은 L2 Switch를 말한다.
- L3 네트워크 : Network Layer
- IP 주소와 같은 논리 주소에 관심사
- Router : IP(논리 주소) 기반 전달.
- L4 네트워크 : Transport Layer
- 관심사 : IP + Port
- TCP, UDP 와 관련된 내용이다. end to end 간의 사용자들의 통신에 연결성(신뢰성)을 부여할 수 있다.
- L4 Load Balancer : IP + Port 기반 트래픽 분산
많은 양의 트래픽을 여러 서버로 분산한다.
- L7 네트워크 : Application Layer
- 관심사 : HTTP Payload (HTTP Header + Method + IP + Port)
- L7 Load Balancer : HTTP Payload기반 트래픽 분산
페이로드 분석을 통한 DDoS 등 네트워크 공격을 방어하거나 보안을 첨가한 로드 밸런싱
AWS를 사용하지 않은 일반 Private Network는 다음과 같이 구성되어 있다.
외부와의 통신이 안되는 형태라면, 이는 Intranet이겠지만,
여기에 외부와의 통신을 허용하게 된다면 이것이 바로 Internet이 된다.
외부와의 통신을 위해 트래픽을 전달하는 역할이 필요한데, 이것이 L3 switch인 라우터이다.
라우터를 통해서 IP 주소 기반의 트래픽 전달이 가능하고, 각 네트워크 세그먼트간 통신을 제어한다.
여기서 Router가 NAT를 통해서 위의 테이블처럼 외부와 내부의 IP사이의 매핑이 이뤄지는지를 정해둔다.
그리고 같은 네트워크 세그먼트에 속한 장치들의 통신을 관리하는 장비인 L2 switch가
MAC 주소 기반으로 데이터를 전달한다. 이 주소를 학습해서 어느 포트로 패킷을 전송할지 결정한다.
- CIDR (Classless Inter Domain Routing)
가용 네트워크 대역을 정의하기 위해서 사용하는 표기법이다.
IP v4 기준 (0~255까지) 4자리의 십진법의 수 총 4개인 Base IP와
subnet Mask라는 0~32까지의 수를 사용해서 표시한다.
여기서 왜 32까지인지는 숫자에 감이 있는 사람이라면 금방 알게될 것이다.
0~ 255까지의 숫자는 이진법 기준 8자리, 즉 8개의 비트로 결정이 되는 숫자이고
이것이 총 4개가 있으므로 32개가 된다.
IP v4 기준 IP는 32개의 비트로 결정이 되는 것이다.
그리고 이 32개의 비트를 통해서 결정되는 Base IP를 시작으로, 불변 영역을 설정한다.
가령 불변영역이 32라는 것은 앞에서부터 32개의 비트가 모두 불변이라는 뜻이므로, 1개의 IP를 사용한다는 뜻이다.
불변영역이 30이라는 것은 앞에서부터 30개의 비트가 모두 불변이라는 뜻이되므로, 4개의 IP를 사용한다는 뜻이 된다.
그래서 192.168.0.0/24 라면, 192.168.0.0 ~ 192.168.0.255 까지의 가용영역을 뜻하게 된다.
2. AWS 네트워크의 시작 : VPC와 subnet 설정
AWS의 클라우드 서버 내에서 우리만의 가상 private network를 구축해야 한다.
먼저 VPC에서 네트워크의 구성을 시작해야 한다.
가용영역을 배웠으니 먼저 얼마만큼의 private IP를 사용할 것인지를 결정해야 하고,
그 다음에 VPC를 서브넷이라는 몇개의 네트워크 영역으로 나눈다.
일반적으로 Private, Public과 같은 두 개로 분류하는데, 원하는 대로 더 분류가 가능하다.
외부와의 연결을 할 수 있는 서브넷은 public 으로,
내부에서 관리해야할 서버나 DB와 같은 것들은 private으로 설정하면 된다.
또한, 가용성을 생각했을 때 private이든 public이든 2개씩 만드는 것이 좋다.
예를 들자면
VPC : 10.0.0.0/28 (16개의 가용영역) -> 특정 region을 선택 | |
아래는 AZ a에 설정된 서브넷들 (main) | 아래는 AZ b에 설정된 서브넷들 (sub) |
"Public Subnet - 0" (10.0.0.0/30 4개 가용 IP ) | "Public Subnet - 1" (10.0.0.4/30 4개 가용 IP ) |
"Private Subnet - 0" (10.0.0.8/30 4개 가용 IP ) | "Private Subnet - 1" (10.0.0.12/30 4개 가용 IP ) |
이런식으로 AZ a에 메인 서비스를 두고,
만약 AZ a에 문제가 생겼을 시 바로 AZ b에서 서비스를 이어 받을 수 있도록 이중화를 하는 것이다.
3. AWS VPC의 외부와의 연결 (1) - IGW(Internet Gateway)
Public과 Private을 나누는 중요한 기준은 외부와의 연결에 있다.
그런데 위에서 우리는 서비스 지역 선택이나 AZ선택, 가용영역만을 배분했을 뿐이지
실질적으로 외부와의 연결을 다루도록 설정하지는 않았다.
이를 위해서 두 가지가 필요한데, 첫 번째가 IGW이다.
IGW는 VPC 내부 서버가 외부와 양방향 접근이 가능하도록 열어주는 Gateway가 된다.
4. AWS VPC의 외부와의 연결 (2) - Route Table
subnet 내의 서버에서 요청 발생 시 어디로 가야 하는지 설정하는 작업이 필요하다.
Public subnet의 경우, 외부로 나가고 싶다면 Target을 0.0.0.0/0 에 요청을 전달하면,
Route Table이 IGW로 연결시켜주도록 설정해야 한다.
그리고 내부와의 요청은 내부로 갈 수 있도록 Routing을 해주는 것이 Route Table이다.
위의 과정에서 외부와 Public은 연결이 되었으나, Public과 Private과의 연결이 되지 않았다.
그 전에 먼저 인바운드, 아웃바운드 규칙과 SG, NACL에 대해 설명하겠다.
4.5. SG(Security Group), NACL(Network Access Control List)
AWS에서 네트워크 트래픽을 제어하는 보안 계층이다.
SG는 인스턴스 단위의 Stateful 보안 규칙을 규정하고,
NACL은 서브넷 단위의 Stateless 보안 규칙을 규정한다.
Security Group(SG) 설정:
- 인바운드 규칙:
- 허용하는 트래픽: 인스턴스에 접근할 수 있는 트래픽을 정의. 예를 들어, HTTP(S) 트래픽은 80/443 포트, SSH는 22 포트 등을 허용.
- 특정 IP 또는 CIDR: 외부에서 접근할 IP 범위나 특정 IP 주소만 허용할 수 있다.
- 아웃바운드 규칙:
- 모든 아웃바운드 허용: 기본적으로 모든 아웃바운드 트래픽이 허용되지만, 필요에 따라 외부로 나가는 트래픽을 제한할 수 있다.
- 특정 트래픽만 허용: 특정 포트나 IP 주소로의 아웃바운드 트래픽만 허용할 수 있다.
Network ACL(NACL) 설정:
- 인바운드 규칙:
- 각 서브넷에 대한 인바운드 트래픽을 허용하거나 거부할 수 있다.
- 예를 들어, 서브넷 내부로 들어오는 SSH(22번 포트) 트래픽이나 HTTP(S) 트래픽을 허용하고, 나머지는 차단할 수 있다.
- 아웃바운드 규칙:
- 서브넷에서 나가는 트래픽에 대해 허용 또는 차단 규칙을 적용한다.
- 모든 트래픽이 외부로 나가는 것이 아니라, 필요한 포트와 IP 대역에 한해서만 나가도록 설정할 수 있다.
즉, SG는 상태를 가지기 때문(Stateful)에 인바운드 트래픽을 허용하면,
응답 트래픽인 아웃바운드는 모두 허용하는 편이다.
반면, NACL은 상태를 가지지 않기 때문에 인바운드 규칙과 아웃바운드 규칙을 각각 설정해주어야 한다.
5. 외부에서 내부 Private으로 접근하기 위한 Bastion Host 설정
먼저 Bastion Host를 public subnet에 배치하고, 공인 IP 주소를 할당받아 외부에서 접근하게 한다.
그리고 Bastion Host의 SG에 특정 IP에서 SSH(22번 포트)로 접속을 허용시키고,
아웃바운드 규칙으로 Private 서브넷의 인스턴스로 SSH 접근을 허용하게 한다.
한편, Private 서브넷 인스턴스에 SG의 인바운드 규칙을 Bastion의 IP주소만 SSH로 접근하도록 허용한다.
이렇게 Bastion은 한 Public subnet을 디딤돌로 삼아 Private으로 연결하도록 도와주는 역할이기에
Jump Server라고 부르기도 하고, Bastion의 SSH로 Private의 SSH까지 연결되므로
이와 같은 방식을 SSH Turneling이라고 부르기도 한다.
6. 내부 Private에서 외부로 나가기 위한 NAT 설정
- 퍼블릭 서브넷에 NAT 게이트웨이 배포: NAT 게이트웨이는 퍼블릭 서브넷에 위치하며,
외부 인터넷과 연결된 Elastic IP를 할당받아야 한다. - 여기서 Elastic IP를 통한 통신을 외부로 나가는 요청과 이에 대한 응답만을 허용하도록 설정하게 한다.
정확히는 IGW는 양방향의 통신을 막지는 않지만, NAT 인스턴스에서 외부에서 오는 요청을 막는다.
- 외부와 내부의 IP를 매핑해서 양방향 통신이 가능하게 하는 포트 포워딩과는 다르다.
- Private 서브넷 라우팅 테이블 설정:
- Private 서브넷의 라우팅 테이블에서 0.0.0.0/0 (모든 외부 트래픽)을 NAT 게이트웨이로 라우팅하도록 설정.
- 보안 그룹(SG) 설정:
- 인바운드 규칙: 내부 인스턴스의 요청에 대한 응답만 허용되도록 구성.
- 아웃바운드 규칙: 외부 인터넷에 대한 모든 아웃바운드 트래픽을 허용.
- 인터넷 접근:
- Private 서브넷의 인스턴스들은 NAT 게이트웨이를 통해 외부로 나가는 트래픽만 허용되며, 외부에서 이 인스턴스들로 직접 접근 불가능(Bastion을 통해서만 가능).
https://www.youtube.com/watch?v=0y6FtKsg6J4
'정보 > Network' 카테고리의 다른 글
클라우드 컴퓨팅, AWS Cloud 서비스 (1) | 2024.10.13 |
---|