Public Cloud/AWS

[AWS] VPC 네트워크 수동으로 설정하기

TTOII 2022. 3. 30. 18:10
728x90

VPC 마법사를 이용하지 않고 직접 VPC를 빌드해본다.

빌드가 완료된 VPC의 구성은 다음과 같을 것이다. 

Region 안에 VPC를 하나 만들고 2개의 가용영역 A, B에 Public, Private subnet을 구축한다.

public subnet에 접근하기 위해 IGW(Internet Gateway)를 이용하고 각 subnet에는 라우팅 테이블이 존재한다. 

private subnet에 접근하기 위해서는 public에서 private을 통해 접근하며 이 때 NATgw를 사용한다.

 

① VPC 및 Subnet 생성하기

첫번째로 Region을 선택하고(나는 버지니아 북부를 선택했다.) VPC를 생성한다. 

VPC 주소를 10.0.0.0/16로 

public subnet을 10.0.0.0/24 로 설정한다. 

public subnet의 0.0.0.0/0이 IGW로 나가도록 구성할 것이다. 

  • 참고로 0.0.0.0/0 은 모든 IP 주소를 의미한다. 

✔︎ VPC 생성 

리소스를 할당하기 위해 subnet을 생성한다.

✔︎ subnet 생성

Public, Private subnet을 각각 한개씩 생성한다.

VPC가 10.0.0.0/16 이므로 subnet의 IP CIDR는 10.0.x.x/x 는 변하지 않아야 한다.

 

✔︎ 라우팅 테이블 설정

라우팅 테이블을 만들고 인터넷 게이트웨이에 경로를 추가해주어야 한다. 

✔︎ 인터넷 게이트웨이 생성

10.0.0.0/16 이외의 모든 IP 주소는 인터넷 게이트웨이를 통해 외부로 통신한다. 

public subnet은 라우팅 테이블과 IGW만 있으면 된다. 

✔︎ 인터넷 게이트웨이와 VPC 연결

IGW를 만들었으면 이제 VPC에 연결해줘야 한다. (어떤 VPC의 출구인지 정하는 것)

나머지는 외부로 나가기 위해 0.0.0.0/0를 외부로 연결 (IGW를 통해) 해준다.

내가 가지고 있는 pvc 네트워크 주소는 로컬로 그 외의 나머지 주소는 모두 igw를 통해 밖으로 나갈 수 있도록 설정한다.

 

인터넷 게이트웨이를 보면 ssh-vpc1 (VPC)에 연결되어 있는 것을 확인할 수 있다.

② 인스턴스 생성하기

인스턴스는 Amazon Linux를 사용할 것이다.

10.0.0.0 ~ 10.0.0.255 중에서 0, 255 는 네트워크 주소와 브로드캐스트용 이므로 사용할 수 없다.

추가적으로 1, 2, 3 또한 사용할 수 없는데 

1은 게이트웨이, 2는 DNS, 3은 DHCP를 위해 예약되어 있는 주소이기 때문이다. 

따라서 251개 사용 가능하다.

 

default VPC를 이용하면 퍼블릭 IP 자동 할당의 기본 설정은 활성화 이지만,

default VPC가 아닌 사용자 지정 VPC의 경우 퍼블릭 IP 자동 할당이 기본적으로 비활성화 되어 있다.

따라서 활성화를 해줘야한다.

또한 랜카드를 활성화해 하나의 VPC 안에 두개의 IP를 할당받을 수 있다. (추가 비용이 청구된다.)

ICMP - 테스트용 외부/내부 ping 되는지 확인하기 위해 설정 (vpc peering 테스트 할 때 ping이 차단되면 안되기 때문)

IGW를 통해 외부에서 내부 (고객이 서비스에 접근하기 위해)로 들어오기 위해서 

key 인증을 통해 public으로 접근하고 public에서 private으로 접근할 때도 이 키를 사용할 것이다.

 

✔︎ 라우팅 테이블 설정 

Public subnet 안의 AWS Linux ec2 생성 후 

만든 pvc의 기본 라우팅 테이블에 0.0.0.0/0을 추가해줘야 IGW를 통해 들어오는 네트워크를 받을 수 있다.

[root@ip-10-0-0-16 ~]# sudo yum install -y httpd
[root@ip-10-0-0-16 ~]# sudo service httpd start
Redirecting to /bin/systemctl start httpd.service

http에 정상적으로 접속 가능하다. 

 

✔︎ private network 라우팅 테이블 생성

private에 대한 라우팅 테이블을 만들어준다. (이미지 ssh-vpc1-net1-public-rtb → ssh-vpc1-net1-private-rtb 변경)

private은 바로 IGW에 연결하지 않고 NATgw와 연결해줘야 한다.(외부에서 내부로 들어오면 X, 들어오면 public과 다를게 없기 때문)

인터넷이 필요하지 않다면 NAT Gateway가 필요없지만, 일반적으로 패치나 업데이트를 위해 인터넷이 필요하므로 NAT Gateway를 만들어준다.

NATgw가 public에 있어야 public의 IP를 DHCP를 통해 받아온다. (보통 EIP를 주로 사용한다.)

private network의 라우팅 테이블에 default 주소를 NATgw로 연결되도록 설정한다.

(public은 IGW, private는 NATgw로 연결하기)

public과 network와 private network를 명시적으로 연결해준다. 

private에 속하는 인스턴스를 만들어서 확인한다.

외부에서 접근하면 안되므로 퍼블릭 IP 자동 할당은 비활성화시킨다. (인스턴스 생성 과정 생략)

 

✔︎ 방화벽 보안 설정

public → private로의 SSH 접속을 위해 소스를 사용자 지정으로 하고 public network로 설정한다.

ping 테스트를 위해 ICMP를 열어주고 웹 서비스 동작 확인을 위해 HTTP를 열어준다.

public에서 받은 key를 이용해 private으로 SSH 접속을 할 것이다. 

이렇게 만들어진 private network의 인스턴스는 퍼블릭 IP 주소를 가지지 않는 것을 확인할 수 있다. 

 

③ SSH를 이용한 public → private 접속

private 인스턴스에 접속하기 위해서는 public에 우선 접속한 뒤 SSH를 이용해 private까지 접속하는 방식으로 진행한다.

public 인스턴스의 .ssh 디렉토리 안에 파일을 만들고 직접 key 내용을 복사해 붙여넣는다. 

key 파일을 사용하기 위해 key 파일의 권한을 변경한다.  

key에 대한 경로를 명시하고 ec2-user 사용자로 private 인스턴스의 pirvate IP에 접속한다. 

[ec2-user@ip-10-0-0-16 ~]$ ls -al
합계 16
drwx------ 3 ec2-user ec2-user  95  3월 30 08:13 .
drwxr-xr-x 3 root     root      22  3월 30 06:53 ..
-rw------- 1 ec2-user ec2-user  83  3월 30 08:13 .bash_history
-rw-r--r-- 1 ec2-user ec2-user  18  7월 15  2020 .bash_logout
-rw-r--r-- 1 ec2-user ec2-user 193  7월 15  2020 .bash_profile
-rw-r--r-- 1 ec2-user ec2-user 231  7월 15  2020 .bashrc
drwx------ 2 ec2-user ec2-user  29  3월 30 06:53 .ssh
[ec2-user@ip-10-0-0-16 ~]$ cd .ssh
[ec2-user@ip-10-0-0-16 .ssh]$ ls
authorized_keys
[ec2-user@ip-10-0-0-16 .ssh]$ vi key.pem
[ec2-user@ip-10-0-0-16 .ssh]$ cat key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA8GzaZxdEw9GA+qv+rINMjAtX9BaKyHIlvvS/nry8qDDQHLv9
UhdkTWbhNeakbIGYKOt1g4p3d6GamFLrH7/0rMWhQQ/Lo5bePxApGvMp89RpV59g
1kurs/MnUzchAX9wNOyVwVmGc7A+gaNSDKmHy4ty9WBuQXxhJnXI23pG8xVHHBg7
aSQbMjjX03mNco6bfNY6/AX5+tIyZDhczxLayN/TMiTGzEMNDv3UegqAF60BcKLO
0UIx9hPBAEwAiHrT3nXhDEKyVtZTuspNv96pyzAbIMem7UVIS3twgxPocvNkxWSl
We8XO9Vw7mp/DWv/rio29IP3dsarzPRyu6axnQIDAQABAoIBAAl50NXVVfF91V6L
3tq/xgmS/OFy7f9eeFxhWxgPikP6wIkRY7eTknF2h5PPRlW8ednLBfOsRm8hoG02
f2vd7e/NTkC5NaZ58MJ9iZE1Wkbw7UH11yQ7EUZjY/5kotljQ3HijTh0pdbzcFM9
                              ....
                            중간 생략
-----END RSA PRIVATE KEY-----
[ec2-user@ip-10-0-0-16 .ssh]$ ls -al
합계 8
drwx------ 2 ec2-user ec2-user   44  3월 30 09:05 .
drwx------ 3 ec2-user ec2-user  111  3월 30 09:05 ..
-rw------- 1 ec2-user ec2-user  394  3월 30 06:53 authorized_keys
-rw-rw-r-- 1 ec2-user ec2-user 1675  3월 30 09:05 key.pem
[ec2-user@ip-10-0-0-16 .ssh]$ ls -l
합계 8
-rw------- 1 ec2-user ec2-user  394  3월 30 06:53 authorized_keys
-rw-rw-r-- 1 ec2-user ec2-user 1675  3월 30 09:05 key.pem
[ec2-user@ip-10-0-0-16 .ssh]$ chmod 400 key.pem
[ec2-user@ip-10-0-0-16 .ssh]$ cd ~
[ec2-user@ip-10-0-0-16 ~]$ ssh -i .ssh/key.pem ec2-user@10.0.128.148
The authenticity of host '10.0.128.148 (10.0.128.148)' can't be established.
ECDSA key fingerprint is SHA256:e/ygq5FGAkjtqSWpXNoYgJTHT7tgWDYLH2LTqUFpC7M.
ECDSA key fingerprint is MD5:0f:09:4c:b7:1e:c3:ce:5e:81:59:57:8b:e3:6b:3e:0a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.128.148' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-128-148 ~]$

VPC 빌드 완료 ~

728x90