본문 바로가기

aws/VPC

vpc - 서버구성 EC2, RDS(2)

지난 포스팅에서는 vpc 구성에 필요한 vpc, routing table, subnet, internet gateway를 구성하였습니다. 

이번 포스팅에서는 구성한 네트워크망에 실제 instance를 띄우고 연결을 하는 작업을 진행할 것입니다. 

이번 포스팅에서는  7~9을 진행하겠습니다. 

1. vpc 생성

2. private subnet 생성

3. public subnet 생성

4. private routing table 생성

5. pulic routing table 생성

6. internet gateway 생성 

7. private ec2 생성(private subnet과 연결)

8. public ec2 생성(public subnet과 연결)

9. private database 생성

10. bastion server 생성

11. NAT 생성

12. bastion server를 사용한 터널링

 

첫번째로 인터넷과 단절된 subnet에 instance를 연결할 것입니다. 

7. private ec2 생성(private subnet과 연결)

aws console로 들어갑니다. 

위와같이 "ec2"를 입력하여 ec2 대시보드에 들어갑니다. 

이렇게 해도 되지만 최근에 알게 된 기능인데 상단에 표시되어있는 압정같이 생긴 버튼을 클릭하면 

자주 사용하는 서비스들을 등록하여 북마크 처럼 이용할 수 있는 기능이 있습니다. 

추가를 해둔 뒤에 이용하시면 편리하실 것 같습니다. 

ec2 대시보드에 들어가서 스크롤을 살짝만 내리면 위와같이 인스턴스 시작이라는 버튼을 볼 수 있습니다. 

인스턴스 시작이라는 버튼을 클릭하여 인스턴스를 생성하는 페이지로 이동합니다. 

다른 종류의 instance를 생성할 수도 있지만 저는 18.04 TLS ubuntu를 설치하겠습니다. 

"선택" 버튼을 누르고 다음 페이지로 넘어갑니다. 

"인스턴스 유형 선택" 페이지에 와서 t2.micro를 선택합니다. 

이번 페이지에서 또한 테스트이기 때문에 t2.micro를 선택하였고 본인의 서버 spec에 맞는 

instance를 선택하시면 되겠습니다. 

우측하단의 "다음: 인스턴스 세부 정보 구성" 버튼을 눌러 다음 페이지로 넘어갑니다. 

"인스턴스 구성" 페이지에서는 세가지 설정을 해주어야 합니다. 

1. 네트워크: 앞서 포스팅에서 생성한 vpc를 선택해줍니다. (test-vpc)

2. 서브넷: 이번 순서는 private 서브넷을 생성하기 때문에  생성한 private subnet을 선택합니다. (test-private-subnet)

3. 퍼블릭 IP 자동 할당: private instance는 외부 인터넷과 통신을 하지 않기 때문에 "서브넷 사용 설정(비활성화)"를 선택합니다. 

설정이 완료되었다면 우측 하단에 "다음: 스토리지 추가" 버튼을 클릭하여 다음 페이지로 넘어가고 

다음 페이지에서는 "다음: 태그 추가" 버튼을 클릭하여 페이지 이동을 합니다.

태그 페이지에서는 여러 태그를 리스트로 설정할 수 있지만 기본적으로 필요한 태그만 설정하겠습니다. 

"Name"(N은 대문자) 이라는 태그를 "test-private-instance"라는 이름으로 지정하겠습니다. 

설정이 완료되었다면 우측 하단에 "다음: 보안그룹 구성" 버튼을 클릭하여 다음 페이지로 이동합니다. 

"보안 그룹 구성" 페이지에서는 접근할 수 있는 white list를 지정해주는 페이지입니다. 

"보안 그룹 할당"에 "새 보안 그룹 생성"을 선택하고 "보안그룹 이름"에 "test-private-secure-group"이라는 

이름을 지정해줍니다. 

하단에는 해당 보안 그룹에서 지정할 white list를 지정합니다. 

SSH와 TCP를 지정해주고 테스트용이기 때문에 모든 ip 주소와 port를 허용합니다. 

설정이 완료되었다면 우측 하단에 "검토 및 시작" 버튼을 클릭하여 다음 페이지로 이동합니다. 

"검토" 페이지에서는 우측 하단에 "시작하기 버튼을 클릭하면 위와같은 팝업창이 뜨게됩니다. 

팝업 창에서 "새 키페어 생성"을 선택하고 하단에 "test_key"라고 이름을 지어줍니다. 

팝업창 우측에 "키 페어 다운로드" 버튼을 클릭하면 "test_key.pem"키를 다운로드 받을 수 있습니다. 

다운로드를 받은 키를 가지고 putty로 instance에 접근하는 방법은 ec2 - aws ec2 만들기 "putty 접속"(2)

페이지로 이동하면 설명되어있습니다. 

키를 다운로드 받았다면 팝업창 우측 하단에 "인스턴스 시작" 버튼을 클릭하여 instance 생성을 완료합니다. 

 

이렇게 되면 private subnet에 연결된 private EC2 instance를 생성하게 됩니다. 

 

8. public ec2 생성(public subnet과 연결)

이번에는 public EC2 instance를 생성하겠습니다. 

private EC2와의 다른점은 단지 subnet 연결 뿐입니다. 같은 내용이 반복되지만 헷갈리는 부분이 있으니 

모두 설명하겠습니다. 

일단 똑같이 ec2 대시보드 페이지에 들어갑니다. 

private에서와 마찬가지로 "인스턴스 시작" 버튼을 눌러 페이지를 이동합니다. 

이번에도 18.04 LTS ubuntu를 선택하여 instance를 생성합니다. 

"인스턴스 유형 선택" 페이지에서 t2.micro를 선택해 주고 

우측하단의 "다음: 인스턴스 세부 정보 구성" 버튼을 눌러 다음 페이지로 넘어갑니다. 

private과 public EC2 instance를 구분하는 페이지가 이부분이라고 생각하셔도 좋을 것 같습니다. 

이번 페이지에서는 private과 마찬가지로 세가지 설정을 하게 되는데 

1. 네트워크: private과 동일한 vpc를 선택합니다. (test-vpc)

2. 서브넷: private과 다르게 public subnet을 선택합니다. (test-public-subnet)

3. 퍼블릭 IP 자동 할당: private과 다르게 퍼블릭으로 오픈해줍니다. (활성화)

설정이 완료되었다면 우측 하단에 "다음: 스토리지 추가" 버튼을 클릭하여 다음 페이지로 넘어가고

다음 페이지에서는 "다음: 태그 추가" 버튼을 클릭하여 페이지 이동을 합니다.

이번 페이지에서는 private과 다르게 이름을 지어주어 구분을 할 수 있게 합니다. 

태그 이름을 "Name"(N은 대문자)으로 입력하여 주고 값을 "test-public-instance"로 지정합니다. 

설정이 완료되었다면 우측 하단에 "다음: 보안 그룹 구성" 버튼을 클릭하여 다음 페이지로 이동합니다. 

테스트용이기 때문에 보안 그룹은 SSH와 TCP를 설정하고 모든 IP와 port를 열어둡니다. 

설정이 완료되었다면 우측 하단에 "다음: 검토 및 시작" 버튼을 눌러 다음 페이지로 이동합니다. 

"검토" 페이지에서는 우측 하단에 시작하기 버튼을 누르면 위와같은 팝업창이 뜨게 됩니다. 

이번에는 위에서 생성한 키를 사용하겠습니다. 

"기존 키 페어 선택", "test_key" 입력, 하단에 라디오 버튼 선택을 한 후에

우측에 "인스턴스 시작" 버튼을 클릭하여 인스턴스를 생성합니다. 

 

이제 생성한 두개의(private Ec2 instance, public Ec2 instance)를 확인해보겠습니다. 

위에서 생성한 두개의 인스턴스가 보입니다. 

첫번째로 보이는 public 인스턴스는 "IPv4 퍼블릭 IP"가 생성되어있는 것을 볼 수 있고 

반대로 두번째로 보이는 private 인스턴스는 "IPv4 퍼블릭IP"가 없는 것을 확인할 수 있습니다. 

따라서 public은 외부에서 접근이 가능하고 private은 외부에서 접근이 안됩니다. 

 

9. private database 생성

이번 포스팅의 마지막 순서인 database를 생성하겠습니다. 

database도 외부 접근 여부를 설정을 통해 선택할 수 있습니다. 

이번 모델에서는 database를 외부에 허용하지 않는 모델을 진행해보겠습니다.

vpc 안에 데이터베이스를 생성하려면 먼저 선행되어야 하는 작업이 있습니다.

vpc에서 데이터베이스를 사용하려면 최소 두개의 private 서브넷이나 public 서브넷이

있어야하고 서브넷 그룹을 생성해야 합니다. 

현재까지 만든 서브넷은 private 1개 public 1개이기때문에 추가적으로 필요한

private 서브넷 한개를 더 생성하겠습니다. 

복습하는 마음으로 진행해 봅니다. 

vpc 대시보드로 이동합니다. 

검색창에 입력하여 이동할 수도 있고 상단에 북마크를 지정해 놓으면 편합니다. 

대시보드에서 좌측에 "서브넷" 버튼을 클릭하고 우측에 나오는 화면에서 "서브넷 생성" 버튼을 클릭합니다. 

서브넷을 생성할 때 네가지를 지정해주어야 합니다. 

1. 이름태그: 식별할 수 있게 "test-private-subnet-db"로 지정해줍니다. 

2. VPC: 기존에 생성한 "test-vpc"를 선택해줍니다. 

3. 가용 영역: 기존에 생성한 "private subnet"과 겹치지 않게 다른 가용영역을 선택해줍니다. 

지난번에 생성한 private subnet은 "ap-northeast-1a"이기 때문에 이번에는 "ap-northeast-1c"를 선택합니다. 

4. IPv4 CIDR 블록: 기존에 생성한 블록은 "10.0.1.0/24", "10.0.2.0/24"이기 때문에

vpc CIDR 블록 "10.0.0.0/16" 범위 안에서 다른 블록 "10.0.3.0/24"을 설정해줍니다.

 

설정이 완료되었다면 우측 하단에 생성 버튼을 눌러 생성을 완료합니다. 

서브넷을 생성했다면 라우팅 테이블에 연결해주어야 서브넷 설정이 완료됩니다. 

vpc 대시보드에서 좌측에 "라우팅 테이블"을 클릭하고 우측 화면에서 "test-private-rtb"를 선택한 후에 

하단에 탭에서 "서브넷 연결 탭"을 선택하고 마지막으로 "서브넷 연결 편집" 버튼을 클릭하여 페이지를 이동합니다. 

"서브넷 연결 편집" 페이지에서 두개의 private subnet 선택을 확인하고

우측 하단에 "저장" 버튼을 클릭하여 완료합니다. 

이렇게 되면 데이터베이스에 필요한 private 서브넷을 생성하는 것이 완료되었습니다. 

이제부터 데이터베이스에 필요한 서브넷 그룹을 생성하겠습니다. 

 

데이터베이스 대시보드로 이동합니다.  

ec2 대시보드를 이동할 때와 마찬가지로 검색창에 rds를 입력하여 찾을 수도 있고 

자주 사용한다면 콘솔 화면 상단에 북마크를 지정해놓을 수 있습니다. 

데이터베이스 대시보드에서 좌측에 "서브넷 그룹"을 선택하고 나타나는 우측 화면에서 

"DB 서브넷 그룹 생성" 버튼을 클릭합니다. 

서브넷 그룹을 생성할 때는 두가지 항목을 설정해주어야 합니다. 

1. 서브넷 그룹 세부정보

2. 서브넷 추가

"서브넷 그룹 세부 정보" 항목에서는 

1. 이름: 식별 가능하게 "test-private-subnet-group-db"로 적어줍니다. 

2. 설명: test private subnet group for db

3. VPC: 기본에 생성한 "test-vpc"를 선택해줍니다. 

"서브넷 추가" 항목에서는 다음과 4가지 세팅을 해야합니다. 

1. 1번에 있는 버튼을 누르면 하단에 "이 서브넷 그룹의 서브넷" 하단에 서브넷의 리스트가 

표시됩니다. 

2. 이중에서 "10.0.2.0/24" 블록을 가진 public 서브넷을 "제거" 버튼을 눌러서 제거합니다. 

3. 가용 영역: 데이터베이스를 위해 생성한 subnet인 "ap-northeast-1c"를 선택합니다. 

4. 서브넷: "10.0.3.0/24" 블록을 가진 데이터베이스 용 private 서브넷을 선택해줍니다. 
이렇게 데이터베이스를 위한 서브넷 생성을 완료하였습니다. 

 

이제 진짜로 vpc에서 사용할 데이터베이스를 생성할 차례입니다. 

rds 대시보드에서 "데이터베이스 생성" 버튼을 클릭하여 이동합니다. 

데이터베이스 설정 또한 제대로 하려면 여러가지 설정사항이 필요하지만 

이번 포스팅의 목표는 "최소한의 VPC를 구성해보자"이기 때문에 정말 구성을 하는데 

최소한으로 해야하는 설정만 할 것입니다. 

여섯가지를 설정할 것입니다.

첫번쨰로 사용할 데이터베이스를 정합니다. 

데이터베이스를 Mysql로 설정해줍니다. 

두번째로 생성할 데이터베이스의 이름을 지정해줍니다. 

세번째로 생성할 데이터베이스의 admin 비밀번호를 설정해줍니다. 

네번째로 테스트용 데이터베이스기 때문에 가장 작은 데이터베이스를 선택합니다. 

여기서 용량을 지정해주지 않고 default로 되어있는 데이터베이스로 하게 되면 

적지 않은 요금이 부과되기 때문에 굉장히 중요한 부분입니다. 

다섯번째로 vpc 설정을 해줍니다. 

생성한 vpc(test-vpc)를 선택해주고 "퍼블릭 액세스 가능"을 "아니오"로 설정해줍니다. 

마지막으로 "추가 연결 구성" 영역을 설정합니다. 

1. "서브넷 그룹"은 위에서 생성한 서브넷 그룹을 선택합니다. 

2. 보안그룹은 접근할 ip나 포트를 지정해 주는 것인데 위와같이 "test-private-datebase"로 

이름을 지정해주면 모든 ip가 허용되고 "3306"포트가 허용되는 보안 그룹이 생성됩니다. 

 

이번 포스팅에서는 vpc에서 사용할 ec2인스턴스와 데이터베이스 인스턴스를 생성해보았습니다. 

다음 포스팅에서는 이번 포스팅에서 생성한 ec2 인스턴스와 데이터베이스에 접근하여 

개발/운영을 할 수 있게 필요한 "bastion server, NAT gateway"작업과 

white list와 같은 역할을 하는 ACL설정을 해보겠습니다.