배스천으로 뚫으려다 포기하고 클라우드 셸로 뚫은 이야기
안녕하세요! 재니미입니다.
가상머신을 처음 구성할 때 가장 중요하게 고려했던 부분은 보안이었습니다. 가상머신에 퍼블릭 IP를 할당하여 인터넷에 직접 노출할 경우, 외부로부터 온갖 공격의 표적이 되기 쉽습니다.
외부 노출 없이 안전하게 접근할 방법을 찾다가 OCI의 ’배스천(Bastion) 서비스’를 먼저 시도했습니다. 하지만 결론부터 요약하자면, 원인을 알 수 없는 플러그인 구동 실패로 배스천 도입은 결국 포기했고, 최종적으로는 클라우드 셸(Cloud Shell)의 프라이빗 네트워크 기능으로 우회하여 안전하게 SSH 접속을 성공했습니다.
퍼블릭 IP 없이 가상머신을 안전하게 뚫어낸 삽질 과정과, 배스천 대신 클라우드 셸을 선택하게 된 이유를 정리해 보았습니다.
배스천(Bastion) 플러그인 구동 실패
공식 매뉴얼에 따라 배스천 리소스를 생성하고 인스턴스 내부의 Oracle Cloud Agent에서 플러그인을 활성화했으나, 원인을 알 수 없는 이유로 플러그인이 정상 구동되지 않고 계속 not present 상태에 머물러 있었습니다. 컨트롤 플레인과의 통신 문제로 판단하여 서비스 게이트웨이(Service Gateway)를 구성하고 수차례 인스턴스를 재부팅했음에도 문제는 해결되지 않았습니다.
대안: 클라우드 셸(Cloud Shell) 프라이빗 네트워크
여러 차례의 시도 끝에 찾아낸 대안은 OCI 클라우드 셸(Cloud Shell)이었습니다. 클라우드 셸에서 공식적으로 지원하는 ‘프라이빗 네트워크(Private Network)’ 기능을 활용하기로 했습니다.
다만, 클라우드 셸을 연동하기 전에 가상머신 생성과 VCN, 프라이빗 서브넷 등 내부 네트워크 기본 설정이 먼저 완료되어 있어야 합니다. 네트워크 환경이 준비되어 있다면, 클라우드 셸 세션 자체를 가상머신이 속한 VCN 서브넷에 직접 연결할 수 있습니다. 이를 통해 가상머신을 외부에 전혀 노출하지 않고도, 웹 브라우저의 클라우드 셸 콘솔에서 프라이빗 IP로 안전하게 SSH 접속을 수행할 수 있었습니다.
# 1. 클라우드 셸(Cloud Shell) 상단 메뉴 → Network에서 대상 VCN/서브넷 지정
# 2. 인스턴스 Security List에서 Cloud Shell 서브넷 대역의 22번 포트 허용
# 3. Cloud Shell 콘솔에서 프라이빗 IP로 직접 접속
ssh -i <프라이빗키> rocky@<인스턴스_Private_IP>
배스천 설정 과정에서 다소의 시행착오를 겪었지만, 결과적으로 가상머신을 공용 인터넷에 노출하지 않는다는 본래의 보안 목표는 완벽하게 달성할 수 있었습니다. 무료 VM을 운영하면서 퍼블릭 IP 노출이 부담스러우셨던 분들께 좋은 대안이 될 것입니다.
다음 글에서는 이렇게 접속 환경을 확보한 가상머신에서, 세션이 끊겨도 에이전트 작업을 유지해 주는 tmux 설정에 대해 다루겠습니다.
감사합니다.