AWS - VPC
Virtual Private Cloud에 대해 알아보자!!
이론
VPC (가상 사설 클라우드)
Virtual Private Cloud의 약자로 AWS 상에서 논리적으로 독립된 공간을 제공하여 리소스를 실행할 수 있게 도움
VPC의 종류
AWS에는 리전 별 Default VPC와 Custom VPC가 존재한다. Default VPC는 각 리전에 기본적으로 하나씩 생성되어 있고, Custom VPC는 리전 별로 최대 5개까지 생성할 수 있다.
Subnet (서브넷)
네트워크 영역을 나눈 망 클라우드 환경의 VPC에서도 서브넷을 통해 네트워크를 분리하여 나눌 수 있다.
서브넷에서 예약된 IP 주소
서브넷에 할당한 IP 대역이 10.0.0.0/24라면 10.0.0.0 ~ 10.0.0.255 중에서
주소 | 설명 |
---|---|
10.0.0.0 | 네트워크 주소 |
10.0.0.1 | AWS VPC 가상 라우터 주소 |
10.0.0.2 | AWS DNS 서버 주소 |
10.0.0.3 | 향후 새로운 기능을 위해 예약 |
10.0.0.255 | 네트워크 브로드캐스트 주소 |
또한 AWS Subnet에는 Public Subnet과 Private Subnet이 존재한다. Public Subnet은 외부 인터넷과 직접적인 통신을 할 수 있는 네트워크이고, Private Subnet은 외부 인터넷과 직접적인 통신을 할 수 없는 패쇄적인 네트워크이다. *단 Private 서브넷의 경우에도 NAT 게이트웨이가 있다면 외부와의 통신이 가능하다.
Security Group과 ACL
인스턴스 단계에서 보안 기술은 Security Group이다. 서브넷에서 사용하는 보안 기술도 존재하는데 Access Control List (ACL)이다.
실습 - Public Subnet VPC 구성
실습 단계
Public Subnet VPC 생성 | 검증 |
---|---|
VPC 생성 | EC2 인스턴스 생성 |
퍼블릭 서브넷 생성 | EC2 인스턴스 접근 후 통신 확인 |
인터넷 게이트웨이 생성 및 VPC 연결 | |
퍼블릭 라우팅 테이블 생성 및 서브넷 연결 | |
퍼블릭 라우팅 테이블 경로 추가 |
VPC 생성
- VPC Console 접속 -> VPC
- 이름: CloudPeter-VPC IPv4 CIDR 블록: 10.0.0.0/16
- 생성 확인 *나중에 기본 VPC와 사용자 VPC를 구분할때 Name Tag의 유무를 확인할 수 있음
Public Subnet 생성
- VPC Console 접속 -> 서브넷
- VPC ID: 생성한 VPC 선택 (CloudPeter-VPC) 이름 태그: CloudPeter-Public-SN 가용 영역: ap-northeast-2a IPv4 CIDR 블록: 10.0.0.0/24
- 생성 확인
인터넷 게이트웨이 생성 및 VPC 연결
외부 인터넷 구간과 통신을 위해 IGW을 생성하고 VPC와 연결
- VPC Console 접속 -> 인터넷 게이트웨이
- 이름 태그: CloudPeter-IGW
- IGW와 VPC 연결 사용 가능한 VPC: 생성한 VPC 선택 (CloudPeter-VPC)
- 연결 확인
여기까지 진행했다면 인터넷과 통신하기 위한 IGW가 VPC와 연결되었고, 서브넷도 생성된 상태이다. 단 아직 외부인터넷에 접근은 불가능한데 VPC의 가상 라우팅 테이블에 외부 인터넷으로 가는 라우팅 경로가 없기 때문이다.
퍼블릭 라우팅 테이블 생성 및 서브넷 연결
- VPC Console 접속 -> 라우팅 테이블
- 이름 태그: CloudPeter-Public-RT VPC: 생성한 VPC 선택 (CloudPeter-VPC)
- 생성 확인 및 서브넷 연결 서브넷 연결 클릭 서브넷 연결 편집 클릭 전에 생성한 서브넷 선택
퍼블릭 라우팅 테이블 경로 추가
- VPC Console -> 라우팅 테이블
- CloudPeter-Public-RT 선
- 라우팅 탭 진입
- 대상: 0.0.0.0/0 대상: 인터넷 게이트웨이 -> igw-어쩌고 저쩌고 선택
- 적용 확인
이제 모든 설정을 완료하였습니다. 실제 통신이 가능한지 검증하도록 하겠습니다.
EC2 인스턴스 생성
통신 여부를 확인하기 위해 EC2 인스턴스 생성
-
EC2 Console 접속 -> 인스턴스
-
인스턴스 시작 클릭
-
이름: Public-EC2 OS 이미지: Amazon Machine Image(AMI), 64bit, 인스턴스 유형: T2.mirco 키 페어: 항상 사용하는 그거
-
네트워크 설정 -> 편집
-
VPC: 생성한 VPC 선택 (CloudPeter-VPC) 서브넷: 생성한 Subnet 선택 (CloudPeter-Public-SN) 퍼플릭 IP 자동 할당: 활성화
-
보안그룹: default
-
생성 확인
EC2 인스턴스 접근 후 통신 확인
퍼블릭 IP로 SSH 접근 후
ping google.com
만약 핑이 잘 된다면 성공!!
실습 - Private Subnet VPC 구성
실습 단계
Private Subnet 추가 | 검증 |
---|---|
프라이빗 서브넷 생성 | EC2 인스턴스 생성 |
NAT 게이트웨이 생성 | EC2 인스턴스 접근 후 통신 확인 |
프라이빗 라우팅 테이블 생성 및 서브넷 연결 | 퍼블릭 서브넷과 프라이빗 서브넷의 통신흐름 |
프라이빗 라우팅 테이블 경로 추가 |
Private Subnet 생성
-
VPC Console 접속 -> 서브넷
-
서브넷 생성 VPC ID: 생성한 VPC 선택 (CloudPeter-VPC) 이름 태그: CloudPeter-Private-SN 가용 영역 설정: ap-northeast-2c IPv4 CIDR 블록: 10.0.1.0/24
-
생성 확인
NAT 게이트웨이 생성
-
VPC Console 접속 -> NAT 게이트웨이
-
이름: CloudPeter-NAT 서브넷: 퍼플릭 서브넷 선택 (CloudPeter-Public-SN) 탄력적 IP 할당 클릭!
-
생성 확인
프라이빗 라우팅 테이블 생성 및 서브넷 연결
-
VPC Console 접속 -> 라우팅 테이블
-
이름 태그: CloudPeter-Private-RT VPC: 생성한 VPC 선택 (CloudPeter-VPC)
-
프라이빗 라우팅 테이블 선택
-
라우팅 편집 클릭
-
프라이빗 서브넷 (CloudPeter-Private-SN) 선택
프라이빗 라우팅 테이블 경로 추가
-
VPC Console 접속 -> 라우팅 테이블
-
프라이빗 라우팅 테이블 선택
-
라우팅 편집 클릭 다음과 같이 편집 (NAT 게이트웨이 선택)
EC2 인스턴스 생성
-
EC2 Console 접속 -> 인스턴스
-
이름: Private-EC2 네트워크: 생성한 VPC 선택 (CloudPeter-VPC) 서브넷: 생성한 프라이빗 서브넷 (CloudPeter-Private-SN)
-
네트워크 설정
-
고급 세부 정보
위에 사용자 데이터는 암호 방식으로 ssh에 접근할 수 있게 하는 설정이다. EC2 인스턴스가 부팅될 때 읽어서 적용한다.
- 생성 확인
Private-EC2의 네트워크를 확인해보면 퍼플릭 아이피가 부여되지 않은 것을 확인할 수 있다.
EC2 인스턴스 접근 후 통신 확인
-
Public-EC2의 IP로 SSH 접속
-
SSH 접속한 상태에서 Private-EC2의 프라이빗 IPv4 주소로 SSH 접속
-
NAT를 이용해
ping google.com
에 핑이 가는지 확인
*NAT의 경우 안에서 밖으로 나가는건 가능하지만 외부에서 Private Subnet으로 접근하는건 불가능
자원 삭제
- EC2 인스턴스 종료 (EC2 -> 인스턴스 -> 인스턴스 선택 -> 작업 -> 인스턴스 상태 -> 종료)
- NAT 게이트웨이 삭제 (VPC -> NAT 게이트웨이 -> 작업 -> NAT 게이트웨이 삭제) ⚠️ NAT 게이트웨이가 삭제될 때까지 대기
- 탄력적 IP 삭제 (VPC -> 탄력적 IP -> Actions -> 탄력적 IP 주소 릴리스)
- VPC 삭제 (VPC -> VPC -> 작업 -> VPC 삭제)