EC2 인스턴스를 생성하고 사용하다가 프라이빗 서브넷인걸 모르고 다운로드가 안되어서 해결하면서 깨달은 정보들을 모아봤습니다.
EC2 인스턴스
- 아무 설정 없이 EC2 인스턴스를 생성하면 퍼블릿 DNS 또는 퍼블릭 ip를 사용하여 SSH 클라이언트(또는 CMD)를 통해서 접근할 수 있다. VPC 또한 자동으로 기본 VPC로 생성된다.
- 위의 방법 이외에는 접근이 불가능하다.
VPC
- Virtual Private Cloud의 약자로, AWS 계정 전용 가상 네트워크이다.
- 인터넷 게이트웨이를 통하여 인터넷과 통신한다.
- ip 주소 범위로 구성하고, 서브넷(Private, Public)을 생성한 후 라우팅 테이블 네트워크 게이트웨이, 또한 public 서브넷 내부에 NAT 게이트웨이를 구성하여 private 서브넷과 연결할 수 있다.
Subnet
- IPv4 체계의 ip주소를 네트워크 규모에 따라 관리하기 쉽게 클래스라는 이름으로 나누었다.
- 클래스 -> 일반적으로 A,B,C 클래스가 사용된다.
- A 클래스 범위 : 0.0.0.0 ~ 127.0.0.0
- B 클래스 범위 : 128.0.0.0 ~ 191.255.0.0
- C 클래스 범위 : 192.0.0.0 ~ 223.255.255.0
- D 클래스 범위 : 224.0.0.0 ~ 239.255.255.255
- E 클래스 범위 : 240.0.0.0 ~ 255.255.255.255
- 클래스 -> 일반적으로 A,B,C 클래스가 사용된다.
- IP주소를 이용해 IP주소에 해당하는 네트워크에 찾아가면, 네트워크 내의 특정 장치로 호스트 주소를 통해 접근한다.
- 하지만 5개의 클래스로 나누는 방식은 비효율적이라는 결론이 나오고 더 적절한 단위로 네트워크를 분할해서 더 나눠진 작은 네트워크를 서브넷이라고 한다.
- 네트워크를 분할하는 것을 서브네팅 이라고 하며, 서브네팅은 서브넷 마스크를 통하여 수행될 수 있다.
Public Subnet
- 공적인 서브넷으로, 인터넷에 직접적으로 접근할 수 있는 퍼블릭 인스턴스(HOST 서버)가 들어있는 서브넷이다.
- 내부에 있는 퍼블릭 인스턴스는 인터넷과 직접 연결되고, 프라이빗 서브넷 내부에 있는 프라이빗 인스턴스를 인터넷과 연결(로그인) 시켜주는 역할을 한다.
- 또한, 프라이빗 인스턴스와 인터넷을 연결시켜주는 NAT 게이트웨이를 구성하는 서브넷이다.
Private Subnet
- 비밀적인 서브넷으로, 인터넷에 직접적으로 접근할 수 없어 보안적으로 자료를 저장하는 프라이빗 인스턴스가 들어있는 서브넷이다.
- 접근은 SSH 클라이언트(PuTTY, MobaXterm 등)를 사용하거나 터미널을 사용하여 접근할 수 있다. 이때 키 페어가 필요하며(터미널에서는 .pem을 putty에서는 .ppk 가 필요하다.)
- 모든 실행은 프라이빗 인스턴스에서 하는 것이 좋으며, 퍼블릿 서브넷에 있는 NAT 게이트웨이를 통하여 인터넷에 접속할 수 있다.
- -> NAT 게이트웨이를 설정하지 않으면 인터넷에 접속을 못한다. -> S3 접근 불가.
인터넷 게이트웨이
- VPC 구성 요소로, VPC와 인터넷 간 통신이 가능하게 해주는 게이트웨이이다.
- 인터넷 라우팅 가능 트래픽에 대한 VPC 라우팅 테이블에 대상을 제공하고 퍼블릭 IPv4가 할당된(퍼블릭 인스턴스)에 대해 NAT을 수행하는 목적이 있다.
- 공적/탄력적 IP를 가진 인스턴스들에 대해 NAT 역할을 담당한다. 외부 인스턴스가 공적 IP를 가진 AWS 리소스에 대해 요청을 보내면, 인터넷 게이트웨이는 IP 주소를 변환해 리소스의 내부 IP 주소로 해당 요청을 전송하는 역할을 한다.
- -> 서브넷 라우터에 연결되어 있는 인터넷 게이트웨이가 있으면 해당 서브넷 내에서 호스팅되고 있는 리소스는 인터넷에 접근이 가능하다.
- 이러한 서비넷을 퍼블릭 서브넷이라고 한다.
NAT 게이트웨이
- NAT은 Network Address Translation의 약자로, 네트워크 주소 변환(ip 변환) 서비스를 뜻한다.
- 프라이빗 서브넷 내부의 프라이빗 인스턴스가 VPC 외부의 서브스에 연결이 가능하게 하지만 외부의 서브스에서는 프라이빗 서비스에 연결을 할 수 없도록 한다.
S3 서비스와 EC2 인스턴스의 연결
- 위의 이미지에서 프라이빗 인스턴스가 NAT 게이트웨이, 인터넷 게이트웨이를 통해 인터넷과 연결되면, S3는 기본적으로 인터넷과 연결되어 있어서 프라이빗 인스턴스에서 S3(AWS 서비스)와 연결이 가능하다.
직접 생성해보기
1. VPC 만들기
- VPC 검색 후 VPC 생성 클릭
- 이름은 원하는 이름을 적고, IPv4 주소는 10.0.0.0/16을 적는다.
- 뒤에 /16은 ip를 2진수로 바꾼 값에서 16비트까지 고정한다는 뜻이다.
- 즉 /16은 10.0.0.0 ~ 10.0.255.255 까지 범위이다.
- 이후 작업에서 VPC 설정 편집을 클릭 후에 DNS 설정의 DNS 확인 활성화를 체크해준다.
2. 서브넷 만들기
- 서브넷을 만들면 AWS 리소스를 지정된 서브넷으로 시작할 수 있다.
- 인터넷 환경이 필요한 경우 퍼블릿 서브넷을, 인터넷과 격리된 환경이 필요하다면 프라이빗 서브넷을 사용하면 된다.
퍼블릭 서브넷 생성
- 서브넷 카테고리에서 서브넷 생성을 클릭
- VPC를 선택 후에 원하는 서브넷 이름(퍼블릭인 것을 알 수 있게)을 적고, 서버는 ap-northeast-2(서울) a,b,c,d 중 원하는 것을 클릭 후 기억해놓는다.
- 서브넷의 CIDR 범위는 10.0.0.0/24로 설정한다. -> 10.0.0.0 ~ 10.0.0.255 까지 IP주소가 포함된다.
- 이후 작업에서 서브넷 설정 편집을 누르고, 퍼블릭 IPv4 주소 자동 할당 활성화를 체크해준다.
프라이빗 서브넷 생성
- 위의 2번까지 동일하게 진행한다. -> 이름은 프라이빗인 것을 알 수 있게 짓는다.
- 서브넷의 CIDR 범위는 10.0.2.0/23 으로 설정한다. -> 10.0.2.0 ~ 10.0.3.255 까지 IP주소가 포함된다.
- 위의 퍼블릿 서브넷과 다르게 퍼블릭 IP 주소를 할당할 필요가 없다.
3. 인터넷 게이트웨이 만들기
- 인터넷 게이트웨이 카테고리에서 인터넷 게이트웨이 생성 클릭.
- 원하는 이름을 적고, 생성한다.
- 작업에서 VPC에 연결을 클릭 후 위에서 만든 VPC와 연결해준다.
4. 라우팅 테이블 만들기
- 라우팅 테이블이란
- 패킷을 전송할 때 패킷이 목적지 쪽으로 보낼 수 있도록 라우터에게 목적지에 대한 정보를 알려주는 이정표 역할을 하는 것이다.
- 목적지(Destination)와 대상(Target)을 명시한다. -> Destination : 0.0.0.0/0 과 Target : 인터넷 게이트웨이는 모든 IPv4의 주소의 접근을 인터넷 게이트웨이를 통해 서브넷이 인터넷 접근을 한다는 뜻이다.
- 라우터 : 데이터 패킷을 의도한 IP주소로 전달하여 이러한 네트워크 간의 트래픽을 관리하고, 여러 장치가 동일한 인터넷 연결을 사용할 수 있도록 하는 기능을 제공한다.
- 서브넷을 생성하면 기본적으로 디폴트 라우팅 테이블이 생성된다. 이는 로컬기준 라우팅 테이블이다.
- 서브넷을 생성만 하면 인터넷 게이트웨이와 연결되지 않아서 라우팅 테이블에 인터넷 게이트웨이를 추가하여 인터넷 게이트웨이로 연결되게끔 한다.
프라이빗 라우팅 테이블 구성
- 프라이빗 라우팅은 인터넷 게이트와 직접적인 접근을 하면 안되기 때문에 로컬(VPC 내부)로만 라우팅한다.
- VPC를 생성하면 내부의 서브넷들은 무조건 라우팅 테이블을 가져야 하기 때문에 디폴트로 내부만 통신 가능하게 라우팅 테이블이 생성된다.
- 위의 디폴트로 생성된 라우팅 테이블의 이름만 프라이빗인 것을 알 수 있게 바꾼다.
퍼블릭 라우팅 테이블 구성
- 라우팅 테이블 생성을 클릭.
- VPC에 위의 VPC를 연결하고, 생성한다.
- 라우팅 편집을 클릭 후 라우팅 추가를 클릭하고, 대상 IP에는 0.0.0.0/0을, 대상에는 인터넷 게이트웨이를 클릭 후 위에 생성한 인터넷 게이트웨이를 대상으로 잡아준다.
- 이후에 서브넷 연결을 클릭 후 서브넷 연결 편집을 클릭한다.
- 위에서 설정한 퍼블릿 서브넷 이름을 찾아 클릭해준다. -> 이제 퍼블릭 서브넷 내부 서버는 인터넷과 연결이 가능하다.
- 위에서 이름 바꾼 프라이빗 라우팅 테이블의 서브넷 연결 편집을 클릭해 프라이빗 서브넷을 연결한다.
5. NAT 게이트웨이 만들기
- 프라이빗 서브넷은 인터넷과 연결되어 있지 않아서 인터넷에 연결하기 위해 NAT 게이트웨이와 프라이빗 서브넷을 연결시켜준다.
- NAT 게이트웨이 카테고리에서 NAT 게이트웨이 생성을 클릭.
- 서브넷에는 퍼블릭 서브넷을 선택하고, 탄력적 IP를 할당하고 생성. -> 퍼블릭 서브넷 내부에 NAT 게이트웨이를 넣어야 NAT 게이트웨이가 인터넷 게이트웨이랑 통신이 가능하다.
- 다시 라우팅 테이블 카테고리로 가서 프라이빗 라우팅 테이블을 클릭하고, 라우팅 편집을 클릭한다.
- 대상 IP는 0.0.0.0/0이고, 대상은 NAT 게이트웨이를 클릭 후 방금 생성한 NAT 게이트웨이를 선택하고 생성하면 된다.
- 라우팅 테이블의 작업에서 서브넷 연결 편집을 클릭 후 위에서 생성했던 프라이빗 서브넷을 클릭한다.
결론
- EC2 생성 시 퍼블릭 서브넷으로 지정하면 외부 인터넷에서 접속가능한 EC2 인스턴스가 생성된다.
- EC2 생성 시 프라이빗 서브넷으로 지정하면 외부 인터넷에서 접속불가능한 EC2 인스턴스가 생성된다.
- 퍼블릭 서브넷의 서버와 프라이빗 서브넷의 서버는 같은 VPC이기 때문에 퍼블릭 서브넷에서 프라이빗 서브넷에 접근이 가능하다.
- 프라이빗 서브넷은 퍼블릭 서브넷의 NAT 게이트웨이를 통해 외부 인터넷과 연결할 수 있다.
참고 자료
https://velog.io/@rainbowweb/AWS-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-S3
https://cloud-allstudy.tistory.com/406
https://yoo11052.tistory.com/57
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-VPC-End-Point-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%B6%95-%EC%84%B8%ED%8C%85
https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-VPC-End-Point-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%B6%95-%EC%84%B8%ED%8C%85
https://mozi.tistory.com/604
'CS > 클라우드(AWS)' 카테고리의 다른 글
[AWS] 아마존 리눅스 2 (리눅스) 명령어 및 팁 정리 (0) | 2023.04.17 |
---|---|
[백엔드] AWS (0) | 2023.04.08 |
[백엔드] 클라우드 (0) | 2023.04.05 |
댓글