클라우드를 사용할 때 한가지 장점은 보안이다. 인프라 보안을 책임져주는 부분도 있겠지만 개인 pc 를 사용할 때 대비 털려도 개인 파일이 탈취당하지 않는다는 장점이 있다. 코드와 데이터는 털리더락도 개인용 pc의 은행 인증서까지 해킹당하는 시나리오 보단 낫다.
그렇다면 개인용 pc 를 보다 안전하게 원격으로 사용하여 프로그램을 실행하는 방법은 무엇일까. 여기서 고려하는 시나리오는 저성능 랩탑 클라이언트로 코딩하고 원격지에 있는 고성능 pc 서버에서 이를 실행하는 경우다.
한가지 명확한 방법은 포트 포워딩을 하되 통상적이지 않은 포트를 라우터에 열어두고 원격지에서 접속하는 것이다. Port knocking 을 사용하고 ssh 인증서와 결합한다면 웬만해선 깨기 어려워 질 것이다.
또 다른 방법은 요즘 흔히 무선 라우터에 있는 vpn 을 사용하는 것이다. Asus 의 경우 여러가지 알고리즘이 있는데 매우 아쉽게도 적어도 내가 사용중인 라우터에서는 인증서를 사용한 open vpn은 지원 되지 않는다. 하지만 다행하게도 wire guard 는 인증서를 지원하게 해두었다.
하지만 위 두가지 방법은 내 pc의 ssh server, Asus vpn 의 보안 수준만큼만 안전한 단점이 있다. 나는 모르던 ssh server zero day가 있을 수 있고 asus 라우터가 사용중인 vpn 소프트웨어는 업데이트 주기가 그렇게 빠르진 않다. Vpn 은 또한 일단 접속만 성공하면 로컬 네트워크가 모두 장악될 수 있다는 단점도 있어 방어할 영역이 늘어난다.
가장 안전한 방법은 원격으로 직접 접속하지 않는 방법일 것이다. 이를 구현하는 한가지 방법은 클라우드 디스크(구글 드라이브 등)를 매개체로 쓰는 것이다. 이를 위해 서버는 입출력 디렉터리를 클라우드와 동기화한다. 서버는 계속 입력 디렉터리를 모니터링하며 새로운 파일이 올라올 경우 사전에 정해둔 프로그램을 실행해 처리하고 그 결과를 출력 디렉토리에 쓴다. 클라이언트는 작업 요청시 입력 디렉터리에 파일을 올리고, 완료시 출력 디렉터리의 파일을 다운로드 한다.
클라이언트는 파일 업로드나 다운로드시 클라우드의 웹 인터페이스를 사용하도록 하면 설사 서버가 해킹당해도 클라이언트까지 타고 들어오기는 어렵다.
이 때 취약점은 구글 드라이브나 원드라이브를 해킹 하는 것인데 2FA 를 지원하는 클라우드를 사용한다면 더욱 안전해진다. 클라우드 디스크 동기화 프로그램은 구글이나 마소에서 주기적으로 갱신할 것이기에 안전성이 높다.
또 한가지 주의할점은 구글 드라이브나 원 드라이브의 동기화 주기이다. PC 락이 풀려있거나 화면이 켜질때만 동기화되는건 아닌지 확인이 필요하다.