인스턴스
Amazon VPC란 ?
VPC는 Virtual Private Cloud 의 줄임말이다.
AWS에서 VPC 란 사용자를 위한 전용 가상 네트워크라고 생각하면 된다. 이 가상의 네트워크 내부에서 서브넷들을 구성할 수 있고, 서브넷 내부에서 ec2 인스턴스와 같은 호스트를 생성할 수 있는 것이다. VPC의 구조는 다음과 같다.
그림에서 VPC 내부에 퍼블릭 서브넷과 프라이빗 서브넷을 생성할 수 있다. 예를 들어서, VPC 의 네트워크 대역이 172.0.0.0/16 이면 그 하위의 서브넷 A (public) 은 172.0.0.0/24의 대역을 가질 수 있고, 서브넷 B는 172.0.10.0/24 와 같은 네트워크 대역을 가질 수 있다.
퍼블릭 서브넷과 프라이빗 서브넷의 가장 큰 차이는, 퍼블릭 서브넷은 Internet gateway와 연결되어 라우팅 테이블을 통해 외부의 인터넷과 연결되어 통신할 수 있으나, 프라이빗 서브넷의 경우 Internet gateway로 라우팅이 되지 않는다. 즉, 프라이빗 서브넷의 외부로 트래픽이 나가지 않을 것이다.
그렇다면 프라이빗 서브넷에 접속하기 위해서는 어떻게 해야 할까 ? AWS의 VPC에서는 퍼블릭 서브넷과 프라이빗 서브넷이 서로 다른 네트워크 대역을 사용하고 있음에도 불구하고, VPC 내부에서 서로 통신이 가능하다. 즉, 퍼블릭 서브넷을 통해 프라이빗 서브넷으로 접근할 수 있다.
또한 프라이빗 서브넷에서 외부와 통신하고 싶다면, NAT gateway를 사용하면 된다. 이 경우, VPC 외부에서는 프라이빗 서브넷에 들어올 수 없으나, 프라이빗 서브넷에서는 ICMP 프로토콜 (ex) ping 명령어) 명령어들이라던지, yum install 과 같이 외부로 패킷이 날아갈 수 있는 것이다.
VPC 구성하기
VPC는 수동으로 직접 필요한 리소스들을 생성해줄 수도 있으며, VPC 마법사를 이용하여 자동으로 생성해줄 수도 있다.
1. VPC 마법사를 이용하여 구성하기
AWS에 접속하여 VPC 를 검색한다. 그리고 우측 상단에 생성 버튼이 있다. 클릭 !
VPC 등을 선택하면 VPC 뿐만 아니라, 필요한 서브넷, 라우팅 테이블, 인터넷 게이트웨이까지 자동으로 만들어준다.
생성하게 되면 다음과 같은 순서로 작업이 진행된다. 수동으로 구성할 때에도 아래와 같은 순서대로 진행해주어야 한다.
2. VPC 수동 구성하기
VPC를 수동으로 구성할 때는 아래의 순서대로 해주어야 한다.
VPC 구성 -> 서브넷 생성하기 -> 인터넷 게이트웨이 생성 -> VPC 인터넷 게이트웨이 연결하기 -> 라우팅 테이블 생성 -> 라우팅 테이블과 서브넷 연결하기
1) VPC 생성하기
VPC를 생성한다. IPv4 대역 주소는 직접 설정한다.
2) 서브넷 생성하기
위에서 만든 test-vpc 내부에 서브넷을 생성할 것이므로, test-vpc를 선택한다.
서브넷은 2개를 만들었다. 하나는 퍼블릭 서브넷, 하나는 프라이빗 서브넷으로 구성할 것이라서 이름을 각각 test-public-subnet. test-private-subnet으로 지정했다. IP는 지정한 VPC의 대역 안에 속하도록 지정해주어야 한다 !! VPC 에 속하는 네트워크라면, 사용자 마음대로 IP를 지정해줄 수 있다.
서브넷 생성 완료 !
3) 인터넷 게이트웨이 생성하기
VPC > 인터넷 게이트 웨이 설정 에서 새로운 인터넷 게이트웨이를 만들 수 있다.
인터넷 게이트웨이를 생성한 이후에, 사용할 VPC에 연결해주어야 한다 !! 생성하게 되면 우측 상단에 VPC에 연결버튼이 뜬다.
연결할 VPC를 선택한다. test-vpc로 선택해주었다.
4) 라우팅 테이블 생성하기
VPC > 라우팅 테이블 설정 항목을 선택한다. 새로운 라우팅 테이블을 2개 만들 것이다. public subnet 용 라우팅 테이블과 private subnet 용 라우팅 테이블을 각각 만들어주었다. 사용할 VPC인 test-vpc를 선택해준다.
라우팅 테이블을 만들면 다음과 같이 총 세개의 라우팅 테이블이 생겨난다. 이름이 - 라고 된 것은 디폴트 라우팅 테이블이다. 해당 vpc에 대한 라우팅 테이블 중에서, 연결되지 않은 서브넷에 대한 라우팅 정보들은 바로 이 - 라는 디폴트 라우팅 테이블에서 관리하게 된다. 그렇지만 서브넷 별로 라우팅 테이블을 관리하는 것이 좋다고 한다.
public subnet 용 라우팅 테이블이다. 라우팅 편집을 누르고, 위에서 생성한 인터넷 게이트웨이를 추가해주어야 한다.
대상은 0.0.0.0/0 으로 모든 IP를 허용하도록 했다. 즉, 모든 주소에서 인터넷 게이트웨이에 연결된 라우팅 테이블을 통해서, 퍼블릭 서브넷으로 접속할 수 있게 통로를 만들어 준 셈아다.
구성한 VPC를 이용하여 인스턴스 생성하기
https://sinclairstudio.tistory.com/474
인스턴스 생성에 대한 자세한 설명은 위의 포스팅에서 ~~
실제로 생성한 VPC와 서브넷에서 인스턴스를 생성하여, 통신이 되는지 확인해본다. EC2 > 인스턴스 에서 인스턴스 시작을 선택한다.
퍼블릭 서브넷을 사용하는 인스턴스 하나와 프라이빗 서브넷을 사용하는 인스턴스 하나를 생성할 것이다. 퍼블릭 서브넷을 사용하는 인스턴스를 먼저 생성해주었다.
네트워크 설정에서 편집을 누른다.
새로운 보안 그룹을 생성한다. TestServerGroup 이라고 이름 붙여주었다.
나중에 ping 명령어로 외부와 통신이 되는지 확인할 것이므로, ICMP 보안 그룹 규칙을 하나 더 추가해주었다.
다음으로 프라이빗 서브넷을 사용하는 인스턴스를 생성한다.
네트워크 설정 편집 버튼을 누르고, 설정을 추가해준다. test-vpc 를 사용하고, 이번에는 퍼블릭 IP 자동할당을 비활성화했다. 또한 이미 앞에서 보안그룹을 만들어주었으니까, TestServerGroup을 선택해주었다.
EC2 인스턴스 접속하기
퍼블릭 서브넷을 사용하는 test-public-linux 인스턴스에 접속해볼 것이다.
https://sinclairstudio.tistory.com/475
위의 포스팅에 접속 방법을 자세히 써놓았다.
다음으로, 세부정보에서 퍼블릭 IPv4 주소를 복사한다.
터미널에서 ssh 방식으로 접속해주었다.
$ ssh ec2-user@퍼블릭IP주소 -i minjee_key.pem
접속완료
다음으로 public subnet에 있는 인스턴스에서 private subnet에 있는 인스턴스로 접속을 한다.
그전에 test-public-linux에, test-private-linux에 접근할 때 사용하는 key 파일 생성해주어야 한다. 나는 vi 편집기로 key 파일 내용을 복사해서 붙여넣어주었다.
$ vim key
test-private-linux의 주소를 복사한다.
$ ssh ec2-user@프라이빗 IP주소 -i KEY파일 경로
그런데 접속이 안되었다..
잘 읽어보면, 퍼미션 0664 는 너무 too open이라고.. 경고 메세지를 띄워주는데, 이를 해결하기 위해서 퍼미션을 400으로 바꿔준다.
다시 ssh 명령어로 접속해보면 이제는 접속이 잘 된다.
ping test를 시도하면 외부에는 패킷이 안날아가는.. 즉 외부와 통신은 되지 않는 것을 확인할 수 있다 !! 프라이빗 서브넷을 사용하기 때문이다.
NAT Gateway 구성하기
그런데 작업을 할 때 프라이빗 서브넷을 사용하더라도, 외부에서 패키지를 다운로드 받아야 한다는 등 외부로 요청을 해야 할 때가 있다. 이런 경우 NAT Gateway를 VPC에 붙여주면 된다.
VPC > NAT 게이트웨이 선택하고, NAT 게이트웨이 생성 버튼 클릭 !
NAT 게이트웨이를 생성할 때, public subnet을 선택해야 한다. 그리고 연결 유형은 퍼블릭으로 해준다. 이렇게 해야 VPC의 외부와 통신할 연결 통로를 구성할 수 있다. 또한 이 게이트웨이의 주소가 필요하므로 탄력적 IP 할당 버튼을 눌러서, IP를 부여받는다.
VPC > 라우팅 테이블 로 이동해서, test-private-rtb 라고 이전에 생성했던 프라이빗 서브넷에 대한 라우팅 테이블의 내용을 수정한다. 편집하기를 누르고, 이전에 생성한 NAT Gateway를 선택한다.
또한 이 라우팅 테이블에 서브넷 연결이 안되어 있다면, 서브넷 연결 편집을 해주어야 한다. test-private-linux 인스턴스가 사용중인 private subnet과 연결해주어야 한다.
다시 test-private-linux에서 ping을 날리면 잘 날아간다 ~~~~
'Cloud Engineering > AWS' 카테고리의 다른 글
[AWS] LoadBalancer 와 Auto Scaling 그룹으로 웹서비스 로드밸런싱 구성하기 (0) | 2023.03.10 |
---|---|
[AWS] S3 Bucket AWS CLI 설치 및 명령어 정리 (0) | 2023.03.08 |
[AWS] S3 Bucket 생성하기 & S3 퍼블릭 ACL 설정하기 (0) | 2023.03.07 |
[AWS] IAM S3 Bucket 권한, IAM 사용자 그룹 및 사용자 생성하기 (0) | 2023.03.07 |
[AWS] EC2 인스턴스 접속하기 / EC2 서버 ssh 원격 접속하기 / PuTTY 원격 접속 (0) | 2023.03.07 |