Amazon VPC(Virtual Private Cloud)
Amazon VPC(Virtual Private Cloud)를 사용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있다.
이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사
자체 IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경을 완벽하게 제어할 수 있다. 또한 기업 데이터 센터와 VPC 사이에 하드웨어 가상 프라이빗 네트워크(VPN) 연결을 생성하여, 기업 데이터 센터의 확장으로서 AWS 클라우드를 사용할 수 있다.
VPC 구성요소
1. Virtual Private Cloud
AWS 클라우드 내 논리적으로 격리된 가상 네트워크. 선택한 범위에서 VPC의 IP 주소 공간을 정의한다.
2. 서브넷
격리된 리소스 그룹을 배치할 수 있는 VPC IP 주소 범위의 한 세그먼트
3. 인터넷 게이트웨이
인터넷에 연결되는 Amazon VPC 측 게이트웨이
4. NAT Gateway
프라이빗 서브넷에 있는 리소스가 인터넷에 액세스할 수 있게 해주는 고가용성 관리형 네트워크 주소 변환 서비스
5. 가상 프라이빗 게이트웨이
VPN에 연결되는 Amazon VPC 측 게이트웨이
6. Peering 연결
피어링 연결을 사용하여 프라이빗 IP 주소를 통해 피어링 되는 두 VPC 간 트래픽을 라우팅 한다.
7. VPC 엔드포인트
인터넷 게이트웨이, VPN, NAT(Network Address Traslation) 디바이스 또는 방화벽 프록시를 사용하지 않고 AWS에서 호스팅되는 서비스에 VPC 내에서부터 비공개로 연결할 수 있다.
8. 송신 전용 인터넷 게이트웨이
VPC에서 인터넷으로 IPv6 트래픽에 대하요 송신 전용 액세스를 제공하는 상태 저장 게이트웨이
퍼블릭 IP 주소가 없는 인스턴스가 인터넷에 액세스 하는 방법
1. NAT 게이트웨이 또는 NAT 인스턴스의 퍼블릭 IP 사용
NAT 게이트웨이 또는 NAT 인스턴스는 아웃바운드 통신을 허용하지만, 인터넷 상에서 시스템이 프라이빗 주소의 인스턴스에 연결을 시도하는 것을 허용하지 않는다.
NAT 게이트웨이 또는 NAT 인스턴스를 이용해 외부와 통신하면 라우팅테이블에 프라이빗 IP주소가 입력되어 라우팅테이블에 입력된 IP주소로 응답 트래픽을 보낼 수 있다.
하지만 외부에서 통신(공격)하려고 하면 내부 IP주소를 모르기 때문에 통신이 불가해진다(보안이 좋아진다)
2. 하드웨어 VPN연결 또는 Direct Connect 연결
인스턴스는 가상 프라이빗 게이트웨이의 인터넷 트래픽을 사용자의 기존 데이터 센터로 라우팅
보안그룹, 네트워크 ACL
보안그룹
- EC2 인스턴스에서 어떤 트래픽을 허용할 것인지 지정
- 상태 저장 필터링(stateful): 규칙에 상고나없이 반환 트래픽이 자동으로 허용됨
네트워크 ACL
- 서브넷 수준에서 작동하며, 서브넷에 출입하는 트래픽 평가
- 허용 및 거부 규칙 설정
- 동일한 서브넷에 있는 인스턴스 간 트래픽은 필터링 하지 않는다
- 상태 비저장 필터링(stateless): 반환 트래픽이 규칙에 의해 명시적으로 허용됨 (소스 또는 목적지 IP주소와 목적지 포트만 검사하고, 트래픽이 새로운 요청인지 또는 요청에 대한 응답인지 여부는 무시)
트래픽 순서
Client -> Internet Gateway -> VPC -> 라우터 -> 라우팅테이블 -> NACL -> 서브넷 -> 보안그룹 -> 인스턴스
Amazon Management Console을 이용하여 VPC 실습
1. VPC 생성
VPC 생성 클릭
- 이름: MY-VPC (원하는 이름 입력)
- IPv4 CIDR 블록: 10.0.0.0/16
이 값을 지정할 때 특별한 이유가 없다면 사설망 대역 범위 내에서 지정하는 것이 좋다.
* 사설망 대역 범위에 벗어난 IP범위를 사용하는 경우, 해당 서브넷에 연결된 인스턴스가 공용 인터넷의 일부에 연결할 수 없다.
사설망 대역:
- A 클래스: 10.0.0.0/8 (10.0.0.0 ~ 10.255.255.255)
- B 클래스: 172.16.0.0/12 (172.16.0.0 ~ 172.31.255.255)
- C 클래스: 192.168.0.0/16 (192.168.0.0 ~ 192.168.255.255)
/16~/28 외를 선택하면 에러가 발생한다
각 Subnet CIDR block에서 첫 4개의 IP주소와 마지막 IP주소는 사용자가 사용할 수 없으므로 인스턴스에 할당할 수 없다
-> AWS에서 예약한 IP 주소
- 10.0.0.0: 네트워크 주소
- 10.0.0.1: VPC 라우터 용으로 예약한 주소
- 10.0.0.2: DNS 서버의 IP 주소
- 10.0.0.3; AWS에서 앞으로 사용하려고 예약한 주소
- 10.0.0.255: 네트워크 브로드캐스트 주소
입력 후 VPC 생성 클릭
-> VPC가 생성되면서 라우팅 테이블, 네트워크 ACL, DHCP 옵션세트, 보안그룹이 자동으로 생성된다
VPC 생성만으로는 아무것도 할 수 없다,
위에서 만든 VPC에 속한 서브넷을 만들어야 EC2인스턴스 생성이 가능하다.
2. 서브넷 생성
왼쪽 목록의 서브넷으로 이동
- VPC: 방금 생성한 MY-VPC선택
- 서브넷 이름: MY-SUBNET-01 (원하는 서브넷 이름 입력)
- 가용영역: ap-northeast-2a (프리티어에서는 기용영역을 2a와 2c만 사용가능하다)
- IPv4 CIDR 블록: 10.0.1.0/24
현재 VPC의 IP 범위는 10.0.0.0부터 10.255.255.255이다.
VPC 내부에 서브넷이 있으므로 VPC에서 설정한 CIDR보다 작은 아이피 대역을 사용해야한다.
서브넷 생성 클릭
필터 지우기 클릭 - 방금 만든 서브넷 포함 기본 서브넷을 볼 수 있다.
가용영역을 다르게 해 서브넷을 추가로 생성 해준다.
같은 방법으로 또 다른 서브넷 생성
- VPC ID : MY-VPC
- 이름 : MY-SUBNET-02
- 가용영역 : ap-northeast-2c
- IPv4 : 10.0.2.0/24
MY-SUBNET-01, MY-SUBNET-02 가 생성된 것을 볼 수 있다
서브넷을 두개 생성한 이유
EC2를 비롯한 AWS 서비스에서는 multi-AZ라는 개념을 지원하고 있다.
이는 하나 이상의 가용 영역에 유사한 리소스를 동시에 배치하는 기능이다.
이렇게 설정을 하게되면, 하나의 가용영역에 문제가 생기더라도 서비스에 장애가 발생하지 않는다.
AWS에서는 리전당 2개 이상의 가용영역을 제공하며, 2개 이상의 서브넷을 전재로 네트워크를 설계하는 것을 권장한다.
3. 인터넷 게이트웨이 생성 및 VPC 연결
왼쪽 리스트의 인터넷 게이트웨이 선택
인터넷 게이트웨이 생성 클릭
- 이름: MY-IGW
- 인터넷 게이트웨이 생성 클릭
현재 인터넷 게이트웨이 상태는 Detached 이므로 VPC와 연결시켜줘야한다.
작업-> VPC 연결 선택
- VPC: MY-VPC 선택 (default VPC는 현재 인터넷에 연결되어 있어 목록에 뜨지 않는다)
인터넷 게이트웨이 연결 클릭
이제 인터넷 게이트웨이 상태가 Attached로 바뀐것을 확인 할 수 있다.
4. Public 서브넷 이용할 라우팅 테이블 만들기
서브넷을 퍼블릭 / 프라이빗 으로 나누기
퍼블릭 서브넷: 라우팅 테이블에 인터넷 게이트웨이 설정 함
프라이빗 서브넷: 라우팅 테이블에 인터넷 게이트웨이 설정 안함 - 외부에서 접근이 불가능하다.
1. 라우팅 테이블 편집
VPC 생성시 만들어진 라우팅 테이블을 퍼블릭 서브넷으로 이용할 라우팅 테이블로 편집
왼쪽 리스트의 라우팅 테이블 클릭
Public 서브넷으로 사용할 라우팅테이블 이름을 PUBLIC으로 변경 해준다
인터넷 게이트웨이 추가를 위해 라우팅의 라우팅 편집 클릭
- 목적지: 0.0.0.0/0, 대상: 인터넷게이트웨이(내가 생성했던 IGW 선택)
라우팅 저장 클릭 후, 닫기 클릭
첫번째 라우팅 규칙은 10.0.0.0/16, 대상은 local로 내가 설정한 사설 아이피로 들어오는 트래픽은 로컬로 연결하겠다(VPC 내부로 라우트 하겠다) 라는 뜻이다.
그 이외의 모든 IP 접근에 대해서 인터넷 게이트웨이로 향하게 인터넷과 연결시켜줘야한다.
방금 생성한 두번째 라우팅 테이블은 인터넷과 연결된 퍼블릭 서브넷에서만 사용한다.
2. 서브넷 연결 편집
라우팅 테이블이 퍼블릭 서브넷만 연결되도록 편집
아래 목록에서 서브넷 연결 -> 서브넷 연결 편집 클릭
내가 만든 MY-SUBNET-01 클릭 후 저장
3. Private서브넷 이용할 라우팅 테이블 만들기
라우팅 테이블 생성 클릭
- 이름: PRIVATE
- VPC: MY-VPC 클릭
생성 버튼 클릭
라우팅 테이블에서 private만 체크 후 아래 목록의 서브넷 연결 부분 클릭
서브넷 연결 편집 클릭
방금 만든 MY-SUBNET-02 선택 후 저장
아래 그림과 같이 서브넷이 연결된 모습을 확인 할 수 있다.
5. DNS 호스트 이름 편집
VPC > 작업 > DNS 호스트 이름 편집
DNS 호스트 이름 활성화 클릭
도메인 이름이 너무 긴 경우, 도메인을 사용하기 힘들다.
하지만 DNS 호스트 이름을 활성화하면 클라이언트가 도메인을 사용하기 편리하다.
6. 자동 할당 IP 설정
왼쪽 메뉴에서 서브넷으로 이동
MY-SUBNET-01은 퍼블릭 서브넷
MY-SUBNET-02는 프라이빗 서브넷
퍼블릭 서브넷인 MY-SUBNET-01만 체크한다.
작업에서 자동할당 IP 설정 수정 클릭
퍼블릭 IPv4 주소 자동 할당 활성화 클릭
저장 버튼 클릭
7. EC2 생성 (웹서버 생성)
여기부터 전 EC2의 내용과 중복되므로 자세한 이미지는 생략
이미지까지 확인하고 싶으면 아래 링크 접속
생성된 MY-VPC를 이용하여 '인스턴스-public'를 만들어보자.
EC2 대시보드로 이동
인스턴스 시작 클릭
단계 1)
Amazon Linux 2 AMI 선택
단계 2)
t2.micro 선택
단계 3)
네트워크: MY-VPC
서브넷: MY-SUBNET-01 (웹서버를 만들 예정이므로 퍼블릭 서브넷으로 선택해주어야한다)
퍼블릭 IP 자동 할당: 서브넷 사용 설정(활성화) - 서브넷에서 퍼블릭 자동할당 활성화를 해줘야 활성화로 세팅된다.
고급 세부정보의 사용자 데이터
#!/bin/bash
yum install -y httpd
systemctl start httpd && systemctl enable httpd
echo 'WEBSERVER' > /var/www/html/index.html
나머지는 디폴드값
단계 4)
변경 없이 다음 클릭
단계 5)
테그 추가
키: Name
값: WEBSERVER
단계 6)
보안그룹이름: SG-WEB
설명: SG-WEB
SSH유형의 소스를 내 IP 로 변경
내 IP는 현재 내가 위치해 있는 곳의 IP로 변경됨
(구글에서 내 아이피 검색한 결과와 같은 아이피 주소값임을 확인할 수 있다)
규칙추가
유형: HTTP
소스: 위치무관 0.0.0.0/0은 ipv4의 anywhere, ;;/0은 ipv6의 anywhere를 뜻한다.
단계 7)
이상 없으면 시작하기 버튼 클릭
키페어 생성)
새 키페어 생성
원하는 이름 입력 및 키페어 다운로드
인스턴스 시작
인스턴스가 생성된 것을 볼 수 있다.
생성된 인스턴스를 클릭 한 후, 퍼블릭 IPv4 DNS 주소를 복사 -> 새 웹브라우저를 열어서 붙여넣기 해주면
WEBSERVER라는 문구가 뜨는 것을 볼 수 있다.
인스턴스에 연결하기
putty 또는 MobaXterm 이용
여기서는 MobaXterm을 이용해서 연결
Session -> SSH -> 생성된 인스턴스의 퍼블릭 ip 복사 후 remote host에 붙여넣어준다 -> username: ec2-user
-> port: 22
Advanced SSH setting: Use private key 체크 및 아까 다운받은 키 페어를 찾아 열기 버튼을 눌러준다.
(키 페어 제공)
ok 버튼 클릭하면 리눅스 창이 뜬다.
$ ip addr show //ip가 10.0.1.x 인지 확인
또다른 '인스턴스-private' 생성
인스턴스 시작 버튼 클릭
프리티어만 체크박스에 체크
단계 1)
이번에는 Amazon Linux 2 AMI가 아닌 Ubuntu Server 16.04 선택
단계 2)
t2.micro
단계 3)
네트워크: MY-VPC
서브넷: MY-SUBNET-02
퍼블릭 IP 자동할당: 비활성화 - 프라이빗 서브넷은 IP 자동 할당을 시키지 않아도 된다.
(만약 자동 할당을 활성화로 해주면, 퍼블릭 아이피를 자동으로 할당받는다)
단계 4)
변경사항 없음
단계 5)
키: Name
값: DATABASE
단계 6)
새 보안 그룹 생성
보안그룹이름: SG-DB
설명: SG-DB
SSH: 소스 - 위치 무관
규칙 추가 -> 유형: MYSQL, 소스: 위치무관
규칙 추가 -> 유형: 모든 ICMP-IPv4(ping이 나가는지 확인할 수 있다, 만약 퍼블릭 아이피가 부여된다면 ping이 나간다), 소스: 위치무관
단계 7)
검토 후 시작하기
기존 키 페어 선택 및 체크박스 체크
인스턴스 시작
인스턴스 생성 완료!!
윈도우키+R 단축키를 눌러 윈도우에서 CMD창을 열어준다.
ping 아이피주소(부여받은 퍼블릭 ip주소)
ping이 나가지 않는 모습을 확인 할 수 있다.
여기서 ping이 나가게 만들어 주기 위해서는
왼쪽 목록에서 라우팅 테이블 클릭
PRIVATE 체크박스만 선택
아래 라우팅에서 라우팅 편집 클릭
라우팅 추가: 0.0.0.0/0, 인터넷게이트웨이
라우팅 저장
다시 CMD 창에서 ping을 입력해주면 ping이 나가기 시작한다.
(이 방법은 잠깐 네트워크를 연결해주기 위한 방법이다.)
'공부 > AWS' 카테고리의 다른 글
EBS (0) | 2020.12.30 |
---|---|
보안그룹(Security Group) / NAT Gateway (0) | 2020.12.30 |
VPC Peering (0) | 2020.12.29 |
EC2 (0) | 2020.12.28 |
AWS 클라우드 특징 (0) | 2020.12.28 |