Server Production 환경 구축하기(1) - VPC와 서브넷으로 EC2 추가하기
VPC(Virtual Private Cloud)
https://velog.io/@server30sopt/VPC-서브넷-설정으로-RDS에-안전하게-접근하기
-
물리적으로는 같은 클라우드 상에 있으나, 보안상의 목적을 위해 논리적으로 다른 클라우드인 것처럼 동작하도록 만든 가상 클라우드 환경
-
VPC 별로 다른 네트워크를 설정할 수 있으며, 독립된 네트워크처럼 작동한다.
-
만약 VPC를 설정하지 않은 경우 아래와 같은 구조를 띈다.
-
하나의 VPC는 하나의 Region 내에서만 생성이 가능하지만, 두 개 이상의 리전에 걸치는 것은 불가능하다.
-
하지만 하나의 VPC는 여러개의 Amazon Availability Zone에 걸쳐서 생성될 수 있다.
VPC 구조
서브넷(Subnet)
- 보안, 통신 성능 향상 등을 목적으로 VPC를 쪼갠 단위
Public Subnet
- 외부에서 접근 가능한 네트워크 영역
- 인터넷 게이트웨이, ELB, Public IP / Elastic IP를 가진 인스턴스를 내부에 가지고 있다.
Private Subnet
- 외부에서 접근이 불가능한 네트워크 영역
- NAT 게이트웨이를 사용하면 내부에서 외부로는 접근이 가능하다.
- 일반적으로 중요한 리소스들을 엄격하게 관리하기 위해 사용된다.
CIDR
- CIDR란 Classless Inter-Domain Routing으로, 클래스 없는 도메인 간 라우팅 기법이라는 뜻이다.
- 즉, 도메인 간의 라우팅에 사용되는 인터넷 주소를 원래 IP 주소 클래스 체계를 쓰는 것보다 능동적으로 할당하여 지정하는 방식
- 기존에는 Class로 A, B, C, D, E로 나누어 네트워크를 사용했는데, 클래스로 나누게 되는 경우 IP 유연성이 떨어지고 IP의 개수가 많기 때문에 좀 더 유연하게 사용하고자 CIDR라는 개념이 등장했다.
- 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식으로, IP 주소 범위를 정의하는 방식
CIDR 블록
- CIDR블록 = 서브넷
- 예를 들어,
192.168.0.0/16
대역망이 있을 때, 아래 사진은 이 대역망을 세 개의 네트워크 단위인 서브넷으로 쪼갠 것이다.
NAT(Network Address Translation) Gateway
https://kimjingo.tistory.com/180
- Private 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만, 외부 서비스에서는 연결할 수 없도록 하는 게이트웨이 서비스
- 즉, 외부 서비스에서 private 서브넷 인스턴스로 접근할 수 없게 하되, private 서브넷의 인스턴스에서는 외부 서비스로 접근할 수 있게 도와주는 서비스
- NAT 게이트웨이를 사용하면 private 서브넷의 스트리밍 인스턴스가 인터넷 또는 다른 AWS 서비스에 연결할 수 있지만 인터넷에서 해당 인스턴스와의 연결을 시작하지 못하도록 할 수 있다.
인터넷 게이트웨이
- VPC의 인스턴스와 인터넷 간에 통신을 할 수 있게 해주는 게이트웨이
- 만약 인터넷으로 데이터를 보내야한다면 당연히 인터넷 게이트웨이로 트래픽을 전달해야 한다.
- 서브넷이 인터넷 게이트웨이로 향하는 라우팅이 있는 경우 퍼블릭(Public) 서브넷이라 부르며, 반대로 어떤 서브넷이 인터넷 연결을 할 필요가 없다면 해당 서브넷은 프라이빗(Private) 서브넷이라고 부른다.
ACL(Network Access Control list)
- 네트워크 엑세스 제어 목록
- VPC를 위한 하나 이상의 서브넷에서 들어오고 나가는 트래픽을 제어하기 위한 방화벽 역할을 하는 보안 계층
- VPC에 보안 그룹과 비슷한 추가적인 보안 계층을 추가하기 위해 ACL을 설정할 수 있다.
- 보안 그룹은 인스턴스 단에서 보안을 실행한다면, ACL은 서브넷 단에서 보안을 수행한다.
보안 그룹과 ACL 비교
보안그룹 | 네트워크 ACL |
---|---|
인스턴스 단에서 실행 | 서브넷 단에서 실행 |
허용(allow) 규칙만 지원 | 허용(allow) 및 거부(deny) 규칙 지원 |
스테이트풀(stateful): 어떤 규칙과도 관계없이, 반환 트래픽이 자동적으로 허용된다. | 스테이트레스(stateless): 반환 트래픽이 특정 규칙에 의해서 허용된다. |
트래픽을 허용할 것인가에 대한 결정 전 모든 규칙을 평가한다. | 트래픽을 허용할 것인가에 대해 결정할 때 가장 낮은 번호의 규칙부터 시작하여 순서대로 규칙들을 수행한다. |
인스턴스를 시작할 때 보안그룹을 명시하거나 나중에 인스턴스와 보안그룹을 연결할 때에만 인스턴스에 적용된다. | 연결된 서브넷 내 모든 인스턴스에 자동적으로 적용된다. (그리하여, 보안그룹이 너무 관대할 경우, 추가적인 방화벽을 제공한다.) |
Elastic IP
- 탄력적 IP 주소
- 인터넷을 통해 접속할 수 있는 고정적인 공인 IP 주소
라우팅 테이블(Routing table)
- 네트워크 상의 특정 목적지까지의 거리와 가는 방법 등을 명시하고 있는 테이블
- 라우터는 어떤 목적지를 찾아갈 때 해당 라우팅 테이블을 보고 찾아간다.
AWS에서의 라우팅 테이블
- 서브넷 혹은 게이트웨이를 통해서 네트워크 트래픽이 어디로 향하는지에 대해 결정할 때 사용되는 routes라는 몇가지 룰을 포함한다.
- VPC 내에는 Subnet이 있으며, 각 서브넷은 각기 다른 네트워크 대역을 가지고 있다.
- 한 서브넷에서 다른 서브넷으로 가려면 라우팅이 필요하다.
- VPC 내부에 대해서는 자동으로 라우팅이 생성되기 때문에 별다른 설정 없이 한 서브넷에서 다른 서브넷으로 통신이 가능하다.
실제 배포 환경 구축해보기
[AWS] 사용자지정 VPC 만들어서 Public, Private 서브넷 만들기
VPC 생성
우선 해당 프로젝트 배포를 위한 VPC를 위와 같이 생성한다.
subnet 생성
public subnet과 private subnet을 각각 생성한다.
public subnet은 10.0.0.0/24
, private subnet은 10.0.1.0/24
로 설정한다.
추후 서브넷을 추가하는 경우 10.0.2.0/24
, 10.0.3.0/24
… 와 같이 설정한다.
라우팅 테이블 생성
- 생성 시 public subnet을 위한 테이블과 private subnet을 위한 테이블을 별도로 생성해야한다.
인터넷 게이트웨이 생성
- 생성 후 public 서브넷의 라우팅 테이블에 연결해야 인터넷 사용이 가능하다.
NAT 게이트웨이 생성
- NAT 게이트웨이는 public 서브넷에 생성해야한다.
- 생성 후 private 서브넷의 라우팅 테이블에 NAT 게이트웨이를 넣어준다.
ACL 설정하기
EC2 생성하기
- public subnet에 EC2를 생성한다.
- private subnet에 생성할 경우 퍼블릭 IP는 비활성화해야한다.
생성된 환경에 직접 접속해보기
EC2 접속하기
-
처음에 SSH로 접속이 안 됐는데, ACL에서 80만 허용했기 때문에 안되는 것 같아 22번 포트를 추가했다.
- 22번 포트를 추가하면 잘 접속된다.
-
그러나 위 상황에서 apt-get update를 하면 오류가 발생한다.
curl: (28) Failed to connect to download.docker.com port 443 after 278781 ms: Connection timed out gpg: no valid OpenPGP data found.
-
원인은 ACL 때문인데, 이때 ACL 설정을 모든 요청 허용으로 변경하면 해결된다. (결국 무용지물이 된 ACL.. ㅠ_ㅠ)
-
원인은 잘 모르지만 우선은 보안그룹 내에서 인바운드 규칙을 관리하기로 했다.
-
-
여하튼 접속하면 아주 잘 된다!
참고 자료
- https://inpa.tistory.com/entry/AWS-📚-탄력적-IP-Elastic-IP-EIP-란-무엇인가
- https://martinkim1954.tistory.com/entry/AWS-ACL-및-보안그룹-비교-생성-및-적용
- https://tech.cloud.nongshim.co.kr/2018/10/16/4-네트워크-구성하기vpc-subnet-route-table-internet-gateway/
- https://kimjingo.tistory.com/180
- https://jenakim47.tistory.com/14
- https://velog.io/@server30sopt/VPC-서브넷-설정으로-RDS에-안전하게-접근하기
- https://pjh3749.tistory.com/283
- https://yoo11052.tistory.com/40
- https://martinkim1954.tistory.com/entry/AWS-라우팅테이블Route-Table-생성-및-라우팅
- https://inpa.tistory.com/entry/WEB-🌐-CIDR-이-무얼-말하는거야-⇛-개념-정리-계산법
- https://algopoolja.tistory.com/97
- https://hstory0208.tistory.com/entry/네트워크-Class란-CIDR-란-차이점-및-개념을-쉽게-이해해보자-feat서브넷팅-슈퍼넷팅