CIDR(사이더) = IP 주소 구성(SUBNET ID + HOST ID) / IP 주소 표현(A.B.C.D/N)
IP 범위를 지정하는 방식 (VPC 내의 자원들은 VPC의 CIDR 범위 안에서 IP 할당)
Route table의 기본 규칙이 VCP CIDR 블록에서 찾음
사설망이 아닌 CIDR을 사용하면 인터넷과 연결되는 라우트 규칙을 정의하더라도 통신 불가
Subnet
VPC를 CIDR 블록을 가지는 단위로 나누어 더 많은 Network 망을 구축한다.
실제 리소스가 생성되는 물리적 공간
VPC CIDR 블록 범위 안에서 지정 가능
인터넷과 연결되어 있으면 public subnet, 아니면 private subnet
🤔 Multi AZ 사용 이유
하나 이상의 Availability Zone에 유사한 리소스를 동시에 배치하는 기능을 말한다. AZ는 물리적 공간으로 분리되어 있으므로 이중화 구성을 하여 하나의 AZ에 장애가 발생하더라도 서비스에 문제가 없다. 추가 비용도 들지 않는다.
Router
Subnet을 만들면 자동으로 Router를 하나씩 만들어진다.
External-rt : Public subnet의 라우트 테이블
Internal-rt : Private subnet의 라우트 테이블
IGW(Internet Gateway)
VPC는 격리된 네트워크 환경이므로 VPC에서 생성된 리소스들은 인터넷 사용 불가
IGW는 VPC와 Internet을 연결해주는 관문
목적지의 주소가 10.0.0.0/16에 매칭되는지 확인 후 없으면 IGW로 전송 (default gateway)
💡 Public/Private Route Table을 따로 관리해주어야 한다.
NAT Gateway
private subnet에서도 CentOS의 yum, Ubuntu의 apt를 업데이트해야 할 수 있음
Private Subnet이 Internet과 통신하기 위한 Out-bound Instant
In-bound : 외부에서 들어오는 트래픽
Out-bound : 내부에서 발생시켜 외부에서 데이터를 받아오는 트래픽
Private Subnet은 외부에서 요청하는 In-bound는 차단해도 Out-bound 트래픽은 허용 필요
Private Subnet에서 외부로 요청하는 Out-bound 트래픽을 받아 IGW와 연결
Router에게 내부망에 없는 IP로 요청 시, Public subnet의 NAT Instance이 전달받아 요청을 처리해준다.
한 달 사용 가격 = $0.059(시간당) * 24 * 31 * 2 = $43.896 (비싸서 NAT instance로 대체)
Bastion Host(=NAT instance)
내부와 외부 네트워크 사이에서 Gate 역할을 하는 Host
외부에서 접근 가능하도록 Public IP 부여
EC2 VM에서 NAT instance 역할을 하도록 설정할 수 있다.
원래는 외부에서 Private subnet으로 접근이 안 되지만, 관리자처럼 접근이 필요한 경우 Bastion Host를 이용해 ssh 접속을 허용한다. (보안 기능 필요)
원래는 NAT Instance와 Bastion Host를 따로 만들어야 하는데, 이게 또 돈이라서...하나가 두 개의 역할을 동시에 수행하도록 만들 것이다.
1️⃣ VPC 생성
default vpc가 있긴 한데, 새롭게 만들어주자.
VPC를 검색해서 생성을 누른다.
과제에서 내준대로 mission-vpc를 하나 생성했다.
VPC 설정에서 "DNS 호스트 이름 활성화"를 체크해주자.
2️⃣ Subnet 생성
비용 청구될까봐 조마조마하다.
여긴 딱히 어려울 게 없다.
새 서브넷 추가해서 총 4개의 Subnet을 구축해주자.
이렇게 되면 Subnet까지 모두 구축이 끝났다.
3️⃣ External Routing Table
라우팅 테이블이 자동으로 만들어져 있는 것이 있다.
VPC 항목을 보면, mission-vpc에 묶여서 생성된 애를 클릭해서 subnet을 엮어주자.
여기서 모든 subnet을 붙이는 게 아니라, public subnet에 대해서만 연결해준다.
명시적으로 보이게 하기 위해 Route table 이름을 External-rt로 변경하였다.
4️⃣ Internal Routing Table
public subnet을 제외한 private subnet을 위한 routing table을 따로 만들어주자.
생성 누른 후에 위랑 똑같이 작업을 해주면 끝난다.
5️⃣ IGW 생성
별 거 없다. 계속 하던 것처럼 대충 만들어주면 되는데, 마지막에 VPC 연결까지 해주자.
External-rt로 돌아와서 라우팅 편집에 igw를 연결해주면 된다.
6️⃣ NAT Instance
instance긴 한데, AMI를 일반적인 강좌와 다른 걸 받아야 한다.
커뮤니티 AMI에서 nat을 검색해서 나온 이미지 아무거나 선택해주자.
서브넷은 반드시 Public subnet으로 선택해준다.
스토리지는 왠지는 몰라도 gp2 하라고 하셔서 했다.
7️⃣ EIP
다른 포스팅에서 이미 다뤘으므로 패스.
EIP 할당 받아서 방금 만든 인스턴스에 연결해주면 된다.
할당 받아놓고 연결 안 하면 요금 청구되니까 안 쓰면 꼭 해제해야 한다.
8️⃣ Private Route Table에 NAT Instance 연결
Private subnet이 Out-bind를 가능하게 하기 위해서 Public subnet에 붙어있는 NAT 인스턴스에 연결해주면 된다.
여기까지 하면 이제 인터넷 통신을 할 준비가 완료되었다!
📌 OS 계정 생성
기본적으로 ec2-user가 제공되긴 하나, 보안상의 이유로 사용을 금지한다.
ec2-user는 워낙 잘 알려진 계정이라, well-known port 번호인 22번 포트로 bot들이 접속을 시도하는 경우가 많다.
만약, 여기서 뚫리면 내 인스턴스는 비트코인 채굴 광산으로 전락하고 돈은 돈대로 지불해야 하는 초유의 사태가 벌어진다.
putty를 이용한 접속 방법은 AWS 카테고리에서 다뤘으므로 패스
ec2-user로 로그인 했으면 이제 os 계정을 만들어줄 차례다.
# sudo -i // 루트로 계정 변경
# useradd (계정명) // 계정 생성
# passwd (계정명) // 비밀번호 입력
# cat /etc/passwd // 생성된 계정 확인
# vi /etc/sudoers.d/cloud-init // ec2-user와 동일한 권한 부여
(계정명) ALL=(ALL) NOPASSWD:ALL // 파일 저장
# vi /etc/ssh/sshd_config // 루트로 계정 변경
PasswordAuthentication yes // 이 부분 주석 해제
#PasswordAuthentication no // 이 부분 주석 설정 후 저장
# service sshd restart // sshd 데몬 재시작
여기까지하고 등록한 계정으로 다시 터미널에 접속하면 무사히 들어와지는 것을 확인할 수 있다.