vpc - 개발, 운영환경 세팅 Bastion, NAT(3)
지난번 포스팅까지 사실상 기본 구성에서 어플리케이션이나 서비스를 운영하는데
필요한 기본적인 서버 구성은 마쳤습니다.
하지만 vpc는 폐쇄적인 네트워크이고 정작 개발자나 운영자도 서버에 접근을 할 수 없습니다.
그렇기 때문에 개발 또는 운영을 하는 사람들이 작업을 할 수 있게 통로를 만들어 주어야 합니다.(bastion server)
그리고 서버 자체에서도 ubuntu update나 git 소스에 접근을 하기 위해서는 인터넷과
연결되어야 하는 경우도 있습니다. 이 작업을 위한 세팅도 해주어야 합니다.(NAT)
또 한가지 필요한 것은 보안을 강화하기 위해서 ACL(Access Control List)를 추가로 설정해 줄 수 있습니다.
이번 포스팅에서는 10~13을 진행하겠습니다.
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를 사용한 터널링
10. bastion server 생성
bastion server를 생성하는 방법은 간단합니다. 지난번 포스팅에서 public EC2 instance를 생성하는 방법과
동일합니다. 복습한다 생각하고 다시한번 진행해 보겠습니다.
aws console에서 ec2 대시보드로 이동합니다.
대시보드에서 "인스턴스 시작" 버튼을 클릭하여 페이지를 이동합니다.
"AMI 선택" 페이지에서 "Ubuntu Server 18.04 LTS"를 선택합니다.
선택한 후에 우측 하단에 "다음: 인스턴스 세부정보 구성" 버튼을 눌러 다음 페이지로 이동합니다.
"인스턴스 유형 선택" 페이지에서는 설정을 따로 하지 않고
우측 하단에 "다음: 인스턴스 세부정보 구성" 버튼을 클릭해 다음 페이지로 이동합니다.
"인스턴스 구성" 페이지에서는 세가지 세팅을 해주어야 합니다.
1. 네트워크: 기존에 생성한 vpc를 선택합니다. (test-vpc)
2. 서브넷: public 서브넷을 선택합니다.
3. 퍼블릭 IP 자동 할당: 퍼블릭 IP를 활성화하여 외부에서 접근 가능하도록 합니다.
설정이 완료 되었다면 우측 하단에 "다음: 스토리지 추가" 버튼을 눌러 다음 페이지로 이동합니다.
"스토리지 추가" 페이지에서 우측 하단에 "다음: 태그 추가" 버튼을 클릭합니다.
"태그 추가 페이지에서는 중간쯤에 "다른 태그 추가" 버튼을 눌러 태그 추가 란을 활성화 시킨 후에
위와같이 "Name"을 키로, "test-bastion"을 값으로 적어줍니다.
설정이 완료되었다면 우측 하단에 "다음: 보안 그룹 구성" 버튼을 클릭하여 다음 페이지로 이동합니다.
보안그룹 설정 창에서는 "기존 보안 그룹 선택"을 선택 한 후에 기존에 만들어 놓았던
public 보안 그룹을 선택합니다. (test-public-secure-group)
설정이 완료되었다면 우측 하단에 "검토 및 시작" 버튼을 클릭합니다.
"검토" 페이지에서 우측 하단에 "시작하기" 버튼을 클릭하면 위와 같이 팝업창이 뜨게 됩니다.
"기존 키 페어 선택"을 선택하고 기존에 생성했던 "test_key"를 선택하고
아래에 체크 박스에 체크를 한 후에 "인스턴스 시작" 버튼을 클릭하면 bastion server가 생성됩니다.
11. NAT 생성
NAT 게이트웨이는 private subnet의 인스턴스들이 외부 인터넷에
outbound 통신을 할 수 있게 만들어 놓는 통로 입니다.
private subnet 안에 인스턴스를 구성하고 NAT 게이트웨이를 연결하지 않으면 위에서
설명한 것 처럼 ubuntu 보안 업데이트나 github repository에서 소스코드를 pull 하는 등의 작업을 할 수 없게 됩니다.
NAT 게이트웨이를 생성하는 방법은 간단합니다.
일단 vpc 대시보드로 이동합니다.
vpc 대시보드에서 좌측에 "NAT 게이트웨이"를 선택하고 우측에 "NAT 게이트웨이 생성" 버튼을 클릭합니다.
"NAT 게이트웨이 생성" 페이지에서 설정은 두가지를 해주어야 합니다.
1. 서브넷: 생성해 두었던 public subnet을 선택합니다.
(NAT 자체는 인터넷과 통신해야하기 때문에 public에 있어야 합니다.)
2. 탄력적 IP 할당 ID: 새 EIP 생성 버튼을 눌러 새로운 IP를 생성합니다.
설정이 완료되었다면 우측에 "NAT 게이트웨이 생성" 버튼을 클릭해 다음 페이지로 이동합니다.
다음 페이지에서 "라우팅 테이블 편집" 버튼을 클릭합니다.
그러면 vpc 대시보드에서 라우팅 테이블 탭으로 이동하게 됩니다.
라우팅 테이블 페이지에서 private 라우팅 테이블(test-private-rtb)을 선택 합니다.
하단에 표시되는 영역이 클릭한 라우팅 테이블에 대한 정보로 바뀌게 됩니다.
여기서 "라우팅" 탭을 선택하고 "라우팅 편집" 버튼을 클릭하여 페이지를 이동합니다.
"라우팅 편집" 페이지에서 다음과 같은 순서로 진행해주시면 됩니다.
1. "라우팅 추가" 버튼 클릭을 하면 리스트가 한개 추가됩니다.
2. 추가된 리스트에서 좌측 "대상" 값에 위와 같이 "0.0.0.0/0"를 입력합니다.
3. 추가된 리스트에서 우측 "대상" 값에 위와 같이 nat gateway를 선택해줍니다.
이렇게 설정을 하면 nat 게이트웨이가 쉽게 생성됩니다.
12. bastion server를 사용한 터널링
이번 포스팅에서 만든 두가지는 private instance에서 개발 및 운영을 하기 위해 필요한
작업입니다. 외부에서 접근을 할 수 없게 만든 private subnet 안에 있는 ec2는 정작
개발자도 접근을 할 수 없는 상태가 되어버립니다. 그렇기 때문에 개발자나 운영자만
접근을 할 수 있게 구성을 해 놓은 서버가 bastion server이고 이번에는 이 bastion server를
통해 소스코드를 배포하는 작업을 진행하겠습니다.
필요한 준비물: putty, bastion server ec2 SSH key, 접근 하려는 ec2 SSH key
putty를 사용하여 aws ec2를 접근하는 방법은 아래 링크에 접속하셔서 참고하시기 바랍니다.
ec2 - aws ec2 만들기 "putty 접속"(2)
putty로 접근을 하는 방법은 같지만 직접 접근을 하는 방식은 아닙니다.
우리가 생성해 놓았던 bastion server를 통해서 들어가게 됩니다.
첫번째로 해야하는 작업은 터널을 열어두는 것입니다.
생성한 bastion server를 터널로 사용할 것인데 그렇게 때문에
bastion server를 putty로 접속할 때 tunnel 설정을 해주어야 합니다.
1. ec2 대시보드에서 bastion server의 public ip를 복사해둡니다.
2. putty에 bastion server의 public ip를 입력하고 이름을 지정합니다.
3. ec2 대시보드에서 최종적으로 접속할 private ec2의 private ip를 복사해둡니다.
4. putty > ssh > tunnel에 들어가서 위와같이 설정해줍니다.
- Destination: 터널을 통해 궁극적으로 들어갈 private ec2 인스턴스 {private ip}:22(포트는 22번 지정)
- Source port: 임의의 포트(실제 접속을 할 때 사용할 포트, 임의로 지정 가능)
- 위의 설정을 완료하였다면 "Add" 버튼을 누릅니다.
5. putty > ssh > Auth에 들어가서 ssh 키를 넣어줍니다.
(여기서 사용되는 ssh 키는 bastion 서버에 대한 key 입니다. )
6. putty > session에 가서 저장을 하고 실행 시킵니다.
private ec2를 가기 위한 이렇게 되면 터널이 생성되었습니다.
이번에는 private ec2를 접근해보겠습니다.
터널이 생성된 상태에서는 개념적으로 접근할 private ec2가 나의 pc(local)로 내려와있는 상태 입니다.
1. putty를 실행시키고 위와같이 입력해줍니다.
- Hostname: localhost(위에서 언급했듯이 tunnel 설정을 통해 aws private ec2 인스턴스가 localhost로 내려와있는 상태입니다.)
- Port: tunnel을 설정할 때 임의로 지정한 포트를 입력해 줍니다(Source port)
- Saved Sessions: 이름을 지정해줍니다.
2. putty > ssh > Auth로 들어가서 접속할 private ec2 키를 넣어줍니다.
3. putty > session에 들어가서 저장을 하고 실행 시킵니다.
4. bastion server와 private server를 확인합니다.
이렇게 되면 기본적인 모든 서버 세팅이 완료되었습니다.
private 서버 1대와 public 서버 1대 private database 1대가 구성되었고
접근을 위해 bastion server를 만들어 접근하는 방법까지 알아보았습니다.