Ansible을 활용하여 클라우드 내 외부 침입 방어하기

우리 주변에는 사람의 신체와 재산을 보호하기 위한 인적, 물적 자원이 많이 있습니다. 이를테면 CCTV, 블랙박스, 보안 소프트웨어, 보안 센서 등에 해당하는 물적 자원과 경찰관, 경호원 등에 해당하는 인적 자원인데요. 지금까지 이러한 자원의 존재가 당연하다고 생각했기 때문에 자원 활용에 대해 특별한 관심을 가질 필요가 없었죠. 그렇다면, 클라우드 환경에서는 어떨까요? 클라우드 환경은 우리가 직접적으로 보거나 만질 수 없는 한계가 있기 때문에, 이러한 보호 도구를 더욱 잘 이해하고 활용할 줄 알아야 합니다. 이번 시간에는 이전 글에 이어서 Ansible이라는 도구를 활용하여 외부 침입을 잘 방어하는 클라우드 환경에 대해 알아보겠습니다.

# 컨트롤 타워에서 자원 지키기

우리 일상 속 CCTV 사례를 통해 Ansible에 대해 알아보겠습니다. 아래 그림과 같이 우리가 보호해야 할 4개 구역에 CCTV가 설치되어 있고, 각 CCTV 영상을 모두 확인할 수 있는 컨트롤 타워가 있다고 가정합니다. 우리는 컨트롤 타워에서 CCTV-1~4까지 확인하면서 재산을 침해하는 이상 현상을 감지할 수 있습니다. 만약 CCTV-2 지역에 문제가 발생했다면, 경찰을 해당 지역으로 보내게 됩니다. 이를 통해 주변에서 발생할 수 있는 사건/사고를 해결하거나 미연에 방지할 수 있겠죠?

클라우드 환경 감시자 CCTV 확인 컨트롤타워 CCTV-1 CCTV-2 CCTV-3 CCTV-4 보호구역 경찰호출 1 2 3 4
CCTV로 외부 위협을 방어하는 사례

위의 사례에서는 클라우드 환경 컨트롤 타워의 간단한 개념을 소개하려고 4대의 CCTV로 가정했지만, 실제로는 그 수가 상당히 많을 것입니다. 클라우드 환경도 CCTV와 마찬가지로, 보호해야 할 서비스가 적게는 수십 개, 많게는 수천, 수만 개에 이를 것입니다. 그렇다면 이처럼 통제하지 못할 정도로 많은 서비스를 대상으로 외부의 악의적인 침입을 어떻게 막아낼 수 있을까요? 바로 Ansible 도구를 사용하면 가능합니다.

Ansible로 활용할 수 있는 범위는 무궁무진하지만, 우리는 클라우드 보안성 수준을 향상시키는 범위 안에서 Ansible 도구 활용법을 알아보겠습니다.

# Ansible의 마스터 노드(Master Node)에서 자원 지키기

Ansible은 클라우드 환경 인프라를 프로그래밍 언어(코드)로 작성하여 수행할 수 있게 하는 오픈소스 소프트웨어입니다. 이와 같은 도구를 IaC(Infrastructure as Code) 용어라고도 부르는데요. 여러 개의 클라우드 자원을 손쉽게 정의하고 한꺼번에 작업을 수행할 수 있는 자동화가 장점이며 관련 부서에서 즐겨 사용하고 있습니다.

Ansible 도구를 사용해 외부 침입을 막기 위한 간단한 구조는 다음과 그림과 같습니다. CCTV 사례와 마찬가지로 컨트롤 타워 역할을 수행하는 마스터 노드(Master Node)와 실제 작업이 수행되는 타깃 노드(Target nodes)로 구분합니다. 우리는 마스터 노드에 작업할 인프라 정보(IP 주소, 호스트명)를 등록한 후, 작업할 일의 목록을 플레이북(playbook)이라는 파일에 작성해 줍니다. 마치 인프라를 다루는 일도 즐기면서 수행하라는 의미로 플레이북이라고 정한 것 같네요.

직관적인 언어로 정리하면, 우리는 인터넷 환경에서 접속할 수 있는 마스터 노드 서버에 Ansible을 설치한 후, 작업할 대상 서버들의 IP 정보를 넣어줍니다. 그리고 플레이북이라는 파일에서 서버들에게 명령할 일을 쭉 나열합니다. 마지막으로 플레이북을 실행하면, 나열된 할 일들이 타깃 노드에서 전달되어 수행됩니다. 이는 사람이 직접 프라이빗 서브넷에 접속하지 않더라도, 원하는 작업이 일괄로 수행됨을 의미합니다.

클라우드 환경 시스템담당자 인프라를 코드로 작성 ansible play book Master node 타겟 노드의 자동화 관리 프라이빗 서브넷 WEB WAS DB Target nodes
Ansible로 외부 위협을 방어하는 구조

그럼 Ansible을 통해 외부 침입을 막을 수 있는 방법에는 어떠한 것이 있을까요? 클라우드 보안 강화와 외부 침입을 방어하기 위해 WEB 서버, WAS 서버, DB 서버 등에서 수행 가능한 모든 일을 Ansible을 통해서 할 수 있습니다. 그럼 가장 간단히 할 일 몇 가지를 제시해 보겠습니다.


① 클라우드 자원 비밀번호 관리
ID와 Password를 입력하여 접속하는 서버 등을 운영하는 경우, 보안 강화를 이유로 주기적인 비밀번호 변경이 필수입니다. 따라서 매번 하나씩 서버에 접속해서 비밀번호를 변경하는 것이 아니라, 일괄로 비밀번호를 변경하는 작업을 ansible을 통해서 자동화할 수 있습니다. 그럼 수천, 수만 대의 서버 자원을 일괄로 변경할 수 있겠죠?

② 포트 변경
만약 현재 운영 중인 서버가 기본 포트default port로 되어 있다면, 외부 공격 대상이 될 가능성이 높습니다. 여기서 기본 포트의 의미는 소프트웨어 제공사에서 기본값으로 설정한 포트로, ssh 포트는 22포트, RDPremote desktop protocol 포트는 3389포트, 오라클 DB 포트는 1521포트 등이 이에 해당합니다. 이처럼 이미 널려 알려져 있는 포트는 외부 공격이 가능성이 높기 때문에, 알려지지 않은 포트로 변경할 필요가 있습니다. 이러한 경우에 Ansible을 활용하여 기본포트를 사용하는 클라우드 자원을 검색한 후, 알려지지 않은 포트로 변경하는 일련의 작업을 자동화할 수 있습니다.

그 밖에도 내부적으로 정해진 보안 정책에 위배되는 사례를 감시하거나, 사이버 공격의 발생 여부를 검토하는 작업을 Ansible을 통해서 적용할 수 있습니다. 이처럼 Ansible 활용은 클라우드 관리와 운영자에게 편리함을 제공해 줄 뿐만 아니라 비가시적인 보안감사 결과와 의도하지 않은 보안 위협 표면을 줄일 수 있는 적절한 대안이 될 수 있을 것입니다.

이번 글에서는 Ansible이라는 도구를 활용하여 외부 침입을 방어하는 클라우드 환경에 대해 살펴봤습니다. 다음 시간에는 클라우드 환경의 규모에 따라 다르게 수립해야 하는 보안 거버넌스 대해서 알아보겠습니다.

+ 클라우드 보안 입문서를 소개합니다! <클라우드 x 보안 실무 가이드> 저자 인터뷰
+ 언제 어디서나 마음대로 사용하는 클라우드
+ 클라우드 서비스를 선택하는 방법 ‘클라우드의 유형과 서비스 종류 알아보기’
+ 클라우드 서비스의 장·단점과 국내외 시장 동향
+ 클라우드 환경의 속성과 보안 특수성
+ 클라우드 환경의 공통 보안 서비스와 네트워크 보안 서비스
+ 클라우드 환경 내 컴퓨팅 자원과 애플리케이션 자원의 보안 서비스
+ 콘텐츠 보안과 클라우드 보안운영 서비스
+ 가용성 측면의 클라우드 보안 아키텍처
+ ‘성능과 보안의 양립점 찾기’ 성능 향상을 위한 클라우드 보안 아키텍처
+ 데이터 안전성을 위한 클라우드 보안 아키텍처
+ 비용 효율을 위한 클라우드 보안 아키텍처
+ DevOps 환경의 클라우드 보안 아키텍처
+ 파이썬을 활용한 클라우드 서비스 보안 관리


출처: 클라우드 x 보안 실무 가이드(황치하·양지언 지음)

삼성SDS 소셜 크리에이터 양지언(Senior Engineer)
공유하기