1. 개인용 클라우드 웹?
최근 AWS 뿐만아니라, 여러 기업들에서 퍼블릭 클라우드를 많이 서비스하고 있습니다. 여러 기업들의 경쟁 덕분에 개인도 부담없이 클라우드를 통해 원하는 서비스를 구축 할 수 있는 상황입니다.
본격적으로 포스팅을 시작하기 전에 타이틀을 어떤걸로 가져갈까 고민하다가 그냥 직관적으로 "개인용 클라우드 웹"이라는 타이틀을 걸었습니다. 즉, 누구나 쉽게 이해할 수 있는 수준의 웹서버 구축 프로젝트입니다.
다만, '개인용' 이라는 말은 붙인만큼 개인의 입장에서 편하게 사용할 수 있을 것이라고 생각되는 몇가지 특별한 기능들을 구현하는 부분이 중점이 된다고 봐주시면 좋겠습니다.
이번 프로젝트는 '무료'인 오라클 클라우드를 이용하기 때문에, 한정된 자원을 효율적으로 사용하기 위해 여러 편리한 미들웨어나 불필요하게 무거운 오픈소스들을 지양할 예정입니다~!
일단 현재 예상하는 구성은 아래와 같습니다.
- 오라클 클라우드(웹서버)
- Python3 + Flask (웹 프레임워크)
- SFTP (보안 파일송수신)
- SQLite (Lite DB)
- ChromeDriver (웹 자동화)
- VSCodeServer (개발 IDE)
- Jupyter Notebook (파이썬 개발)
편리함과 서버부하 등을 고려하여 선택하였습니다. 프로젝트를 진행하며, 이부분은 변경이 될 수 있습니다.
2. 오라클 클라우드 Free Tier 소개
퍼블릭 클라우드라고하면 아마존의 AWS와 MS의 Azure 그리고... 국내는 네이버 NCP 정도가 대표적이라고 생각됩니다.
오라클 클라우드는 상대적으로 이러한 퍼블릭 클라우드에 비하면, 다소 생소한 면이 있습니다.
하지만, Free Tier 정책에서는 다른 퍼블릭클라우드와 비교해도 충분히 좋은 스팩을 제공하기 때문에 해당부분만 잠깐 살펴보고 본문으로 들가겠습니다.
가장 큰 장점인 "무제한 무료"인 Free Tier 정책입니다.
물론 무료로 제공되다보니 리소스가 풍족한 것은 아니지만, 개인용으로 사용하기에는 충분한(?) 스팩이라고 생각됩니다.
위에 무료 클라우드 서비스의 장점이 나와있는 것을 볼 수 있습니다. 제가 이것들 중에서 마음에 드는것을 뽑으면~
- 200GB 스트로지 용량 (AWS Free Tier : 5GB)
- 2VM 무제한 무료 (AWS Free Tier : 750Hours/Month)
- 매월 10TB의 데이터 송신 (AWS Free Tier : 50GB)
아마존의 AWS와 비교해보면 오라클에서 제공해주는 리소스가 얼마나 훌륭한지 알 수 있으실거 같습니다.
3. VM 만들기
먼저 오라클 클라우드 가입이 선행되어야합니다. 가입은 오라클클라우드 홈페이지(https://cloud.oracle.com)에서 진행합니다.
가입과 관련된 부분은 큰 어려움이 없을거라 생각하고, VM 생성 부분으로 바로 넘어가겠습니다.
로그인 후 왼쪽 상단에 메뉴바를 누른 후 [컴퓨트 > 인스턴스]로 들어가주세요. 그리고 [인스턴스 생성] 버튼을 눌러 인스턴스를 생성해보겠습니다.
3.1 이름 설정
인스턴스 이름과 구획을 설정해줍니다. 이름은 말 그대로 인스턴스를 구분해주는 값으로 원하는 이름으로 설정해주시면됩니다.
구획은 여러 네트워크와 VM들을 감싸고있는 구획이라고 생각하시면 될 것같습니다. 저는 루트에 만들어 서비스하겠습니다.
3.2 OS 이미지 설정
다른 부분은 특별히 건들이지 않고, OS만 Ubuntu로 변경해주었습니다. 처음에는 오라클 리눅스를 사용할까 했지만, 많은 분들이 우분투에 익숙하신거 같아, 해당환경으로 진행하겠습니다. (원하시면 다른 OS로 진행하셔도 무관합니다.)
3.3 네트워크 설정
신규로 인스턴스를 생성하게되면, VNC(가상 클라우드 네트워크)와 하위 서브넷을 생성해줘야합니다.
설정하는 이름 역시도 인스턴스 이름과 같이 구분하는 용도로 사용하는 것이기 때문에 적당히 만들어주세요.
네트워크별로 보안설정등이 들어가기 때문에, 추후 다른 서비스를 위한 VM 구성시 오인하지 않도록 이름을 정해주면 좋습니다.
3.4 SSH 키 추가하기
일반적으로 대부분의 클라우드 서비스 제공자들은 SSH를 통한 접속에는 보안상의 이유로 Key 파일을 사용하도록 하고있습니다.
SSH와 같은 보안통신에서는 주로 공개키(Public Key)와 개인키(Private Key)를 통해(=비대칭키를 이용한 통신) 대칭키를 교환하고, 이를 이용한 암호화 통신을 이용하게됩니다.
공개키는 원본데이터를 암호화 할 수 있고, 개인키는 해당 데이터를 복호화 할 수 있습니다.
또한 개인키는 원본데이터에 전자서명을 넣을 수 있고, 공개키는 해당 전자서명을 검증 할 수 있습니다.
이를 이용하여, 서버와 클라이언트는 서로가 믿을 수 있는 사용자인지 판단할 수 있고, 안전하게 대칭키(암호화와 복호화가 둘 다 가능한 키)를 교환하여, 이를 이용해 서로 데이터를 송수신하게됩니다.
공개키와 개인키만을 이용해도 안전한 통신이 가능하지만, 알고리즘이 복잡하여 대칭키통한 통신보다 매우 느리기 때문에, 비대칭키를 이용한 통신은 주로 대칭키를 안전하게 교환하기 위한 수단으로 사용됩니다.
일반적으로 '자동으로 키 쌍 생성' 또는 '공용 키 붙여넣기'를 통해 SSH 키를 생성/설정 하여 사용하게 되는데요.
저는 후자를 추천합니다. 이유는 비밀키를 생성하는 과정에서 사용자가 암호를 설정 할 수 있기때문에, 만약 비밀키가 노출된 경우에도 암호를 모르면 접속할 수 없기 때문입니다.
PuttyGen 을 이용하여 Generate하고 사용하실 암호를 입력해주시면됩니다.
[Save private key]를 통해 비밀키는 개인 PC에 안전하게 보관해주시고요.
빨간색으로 색칠된 부분이 공개키 부분이니 복사하여 주신 후 아래 부분에 넣어주시면 됩니다.
3.5 부트 볼륨 설정
얼마전까지는 볼륨 스토리지는 최대 2개에 100GB였는데, 최근 200GB로 늘어난거 같습니다.
앞으로 새로운 VM을 만들계획이 있기 때문에, 저는 150GB를 할당해주도록 하겠습니다.
이 후 완료해주시면 아래와같이 인스턴스가 자동으로 생성되고 실행되는 것을 보실 수 있습니다~
4. SSH 접속확인
SSH로 클라우드에 접속하는 방법은 간단합니다. 인스턴스가 생성된 후 보이는 [인스턴스 액세스] 부분에 나와있는 공용 IP주소와 사용자 이름, 그리고 이전에 만들어준 비밀키만 있으면 됩니다.
Putty 접속은 위와같이 넣어주시면 됩니다.
Host 정보이는 [사용자이름@IP주소] 그리고 Auth 부분에 비밀키를 넣어주시면 됩니다.
접속하시면 위와같이 비밀번호를 입력하라는 부분이 나오는데, 이전에 설정한 비밀키의 비밀번호를 넣어주면됩니다.
이 후 접속하게되면 위와같은 화면을 보실 수 있습니다.
보이시는데로, 일부 Boot 데이터를 제외한 145GB의 용량이 남아있는 것을 보실 수 있으며, 여기에 앞으로 여러가지를 넣어보도록 하겠습니다.
5. 네트워크 보안 설정
[컴퓨트 > 인스턴스 > 인스턴스 세부정보] 부분을 보게되면, '네트워크 보안그룹' 이라는 부분이 있습니다.
'없음'으로 되어있는 것을 확인하실 수 있는데요. 이는 해당 VCN의 보안목록상 Default Security List에 종속된다고 볼 수 있습니다.
기본적으로는 위와같이 수신에 대해서는 22번(SSH)와 ICMP를 제외한 모든 프로토콜이 막혀있는 것을 볼 수 있습니다.
오라클에서는 크게 두 가지 보안방식이 존재합니다.
1) VCN 보안 목록
2) 네트워크 보안 그룹
먼저 VCN 보안목록은 VCN에 속해있는 특정한 서브넷에 대한 보안정책을 설정합니다. 즉, 하나의 VCN에 두 개 이상의 서브넷이 존재할 경우, 각각의 서브넷별로 보안정책을 넣어줄 수 있다는 것을 의미합니다.
네트워크 보안 그룹은 특정한 인스턴스가 해당 보안그룹에 속하여 있는지 여부에 따라서 보안정책 적용여부가 판단됩니다. 때문에 소규모의 서버를 운영하고 각각의 인스턴스별로 보안정책을 적용하고 싶다고한다면, 네트워크 보안그룹을 통하여 보안정책을 설정하는편이 유리할 수 있습니다.
여기서 알아둬야할 부분은, VCN 보안목록이든 네트워크 보안그룹이든 가상방화벽이 네트워크에 존재하여 보안정책을 걸어준다는 개념과는 거리가 있습니다.
두 가지 경우 모두, 보안정책이 적용되는 대상의 VNIC에 보안정책이 걸리게됩니다. 따라서, 만약 특정한 인스턴스가 속해있는 네트워크 보안 그룹에서 SSH를 허용하지 않고 있다고 하여도, 해당 인스턴스가 속해있는 VCN 보안목록에서 해당 서브넷에 대하여 SSH를 허용하고 있다면, SSH 연결이 가능하게됩니다.
때문에, 저는 VCN은 기본적인 설정만 유지한 상태로 네트워크 보안그룹을 통해서 인스턴스의 보안정책을 설정하도록 하겠습니다.
다만, 이부분에 대해서는 여러 논쟁거리가 될 수 있기때문에, 어떤방식으로 보안설정을 할지에 대해서는 여러분의 선택에 맞기겠습니다~!
(위 내용은 오라클내 메뉴얼 및 작성자의 테스트를 기반으로 작성하였습니다. 일부 틀린내용이 있을 수 있으며 관련 댓글 부탁드리겠습니다. 감사합니다.)
5.1 네트워크 보안 그룹 추가
먼저 아래 화면으로 이동하여 [네트워크 보안 그룹 생성] 을 눌러주세요.
이 후 보안그룹 이름은 원하시는데로 설정하시고 보안정책을 넣으면 됩니다. 현재는 다음시간에 다룰 VSCode-Server에서 사용할 포트에 대하여 보안정책을 넣어주겠습니다.
일반적으로 VSCode Server와 같은 프로그램들을 사용자가 원하는 포트를 사용할 수 있도록 설정할 수 있습니다. 이때 주의할 부분은 설정하는 포트의 번호입니다.
여러 핵심적인 프로토콜들은 특정 포트를 독점적으로 사용하고 있기때문에, 이러한 포트를 임의로 사용자가 관리자권한을 통하여 점유해버리면 해당 프로토콜이 정상적으로 작동하지 못하는 문제가 발생합니다. 때문에 이러한문제를 방지하기 위하여 IANA에서 지정한 번호는 피해주도록 합시다.
일반적으로 아래 well-known port만 피해주면 큰 문제는 없습니다.
- 0번 ~ 1023번: 잘 알려진 포트 (well-known port)
- 1024번 ~ 49151번: 등록된 포트 (registered port)
- 49152번 ~ 65535번: 동적 포트 (dynamic port)
Registered port 라고해서 약 4.8만개의 포트를 적어두었지만, 공식적으로 알려진 포트들은 두 자릿수에 불과하며 실제 서버단에서 이용할 경우 충돌이 발생할 수 있는 것은 mysql(3306) 정도이기 때문에 큰 고민없이 쓰셔도 괜찮을것 같습니다.
다시 본론으로 돌아와서 VSCode Server에는 2001번 Port를 할당해줄 예정입니다. 따라서 TCP 2001에 대해서 InBound 허용을 설정하겠습니다.
위와같이 설정하고 저장해주시면 해당 네트워크 보안그룹에 대해서 2001번 포트를 목적지로하는 요청은 허용한다는 의미가 됩니다.
이 후 인스턴스 부분으로 돌아와서 아래와같이 네트워크 보안 그룹에 대한하는 보안그룹을 넣어주면 설정이 끝이나게됩니다.
오늘은 여기까지~
특별히 어려운점은 없었을 것같습니다... 혹시 어려운 부분이 있었다면 댓글 부탁드리겠습니다.
감사합니다~
'취미코딩 > WEB' 카테고리의 다른 글
[개인용 클라우드 웹] 3. VS Code-Server 보안설정 (0) | 2021.09.27 |
---|---|
[개인용 클라우드 웹] 2. 클라우드 VSCode Server 구성 (0) | 2021.09.24 |