[GCP 보안 운영 시리즈 ] Cloud Logging으로 보안 모니터링 전략 수립하기
Jinwon Seo
Security Specialist
지금까지 보안 블로그 시리즈에서 많은 보안 제품을 살펴보았습니다. 온 프레미스와 마찬가지로 제품은 동작하면서 많은 로그를 생산합니다. 그리고 이런 로그를 지속적으로 확인하면서 이상징후를 탐지하는 것은 보안 담당자 역할을 큰 부분을 차지합니다. 이번 호 보안 블로그에서는 이런 로그들을 활용하는 시큐리티 모니터링 방법을 알아보겠습니다.
시큐리티 모니터링이 왜 필요할까요? 클라우드 환경의 보안을 위해서는 생각보다 많은 정보가 필요합니다. 또한 보안 강화를 위해서 다음과 같은 질문을 할 수 있습니다.
- 로그를 클라우드 환경 외부로 전송할 수 있는가?
- 클라우드 환경에서 어떤 자산을 운영하고 있는가?
- 모니터링용 로그 소스는 어떤 것들이 있는가?
- 로그에서 어떤 상세 내역을 얻을 수 있는가?
- 어떤 로그를 보안 관점에서 검색할 수 있는가?
- 어떤 취약점 또는 위협의 탐지가 가능한가?
Google Cloud 로그 다루기
자원 관리자(Resource Manager)에서 살펴보았듯이 Google Cloud에는 조직, 폴더, 프로젝트라는 자원 관리용 특수 객체가 존재합니다. 이를 기반으로 Google Cloud는 이용자 클라우드 환경에서 발생하는 로그 역시 조직, 폴더, 프로젝트 기반으로 저장합니다. 이용자 컴퓨팅 환경은 프로젝트에 존재하므로 생성되는 대부분의 로그는 프로젝트에 저장이 됩니다. 다만 반드시 조직에 적용되는 로그의 범위가 존재합니다. 이러한 로그는 조직 수준에서 저장됩니다. 이렇게 구분이 가능한 이유는 Google Cloud의 로그 저장 방식때문입니다.
Google Cloud는 로그를 저장하는 로그 스토리지를 조직, 폴더, 프로젝트로 별도로 구분하여 저장합니다.
개별 프로젝트마다 발생하는 로그를 저장하는 로그 스토리지가 별도로 생성됩니다. 그리고 이 로그는 해당 프로젝트에 권한이 있는 클라우드 이용자만 접근할 수 있습니다. 이 방식은 매우 편리한 보안 강화 기법을 제공합니다.
만일 로그가 단일 저장소에 저장된다면 여러 시스템에서 해당 저장소에 접근하여 로깅 검색을 수행합니다. 이럴 경우 권한에 적합한 로그 검색 범위를 엄격히 적용하여 과도한 탐색, 허가없는 로그 열람 등을 차단하도록 많은 보안 대책을 마련해야 합니다. Google Cloud는 프로젝트 수준에서 로그를 별도 저장함으로써 이를 원천적으로 차단하고 있습니다.
프로젝트 기반으로 로그를 저장하는 것의 장점은 분명합니다. 하지만 기업 보안팀은 관점이 다릅니다. 보안팀은 클라우드 프로젝트의 모든 로그를 검색하고 보안 위협을 탐지해야 합니다. 실질적으로 보안팀은 조직 하위의 모든 노드에서 발생하는 로그를 모두 검색할 수 있어야 합니다.
이를 위해 Google Cloud는 로그 라우터 기능을 제공합니다. 로그 라우터는 저장 위치를 지정하는 기능으로 프로젝트에서 생성된 로그를 복제하여 다른 프로젝트의 로그 스토리지로 전송하는 기능입니다.
Google Cloud가 로그를 저장하는 방법을 살펴보았습니다. 이제 어떤 형식의 로그가 생성되고 관리되는지를 알아보겠습니다.
Google Cloud 로그 분류
Google Cloud가 관리하는 로그는 [그림 1]과 같이 분류할 수 있습니다.
- Workspace logs: 클라우드 웹 콘솔 사용자 로그인 로그
- Cloud audit logs: Admin 활동 로그, 데이터 접근 로그 , 시스템 이벤트 로그 등
- Cloud ops agent: 가상머신 활동 로그, CPU, 메모리 등
- Network logs: VPC Flow, VPC Firewall rule, NAT 로그 등
Google 워크스페이스 로그에는 웹 콘솔에 로그인한 사용자의 로그인 시간, 계정, 접속에 사용한 IP 등을 기록합니다. 이 로그를 이용하여 클라우드 이용자의 로그인을 확인할 수 있습니다. 클라우드 사용자의 로그인 기록은 보안에 중요한 항목입니다. 그러므로 로그인 로그는 보안 컴플라이언스에서 일정기간 보관을 명시하고 있습니다. 워크스페이스 로그는 생성 후 6개월까지 보관됩니다. 만일 이 기간보다 더 오래 로그를 보관해야 하는 필요가 있다면 해당 로그를 Google Cloud의 로그 스토리지와 연계하여 보관을 해야 합니다. 다음과 같은 설정으로 Google Cloud와 연계할 수 있습니다.
- Google Admin 콘솔(https://admin.google.com)에 관리자 계정으로 로그인합니다.
- 계정 -> 계정 설정 -> 공유 옵션을 선택합니다.
- Google Cloud Platform 공유 옵션에서 사용 설정됨을 선택하고 저장합니다.
이제 워크스페이스에서 생성되는 로그는 Google Cloud에도 저장됩니다. Google Cloud는 웹 콘솔 로그인 로그를 조직 수준의 Logging 버킷에 저장합니다. 로그인 기록을 검색하기 위해서는 웹 콘솔 -> Logging -> Logs Explorer 메뉴로 이동합니다. 이후 로그 탐색기의 질의창에 다음을 입력하고 검색을 시작합니다.
다양한 사용자의 로그 성공 및 실패 기록 로그를 탐지할 수 있습니다.
Cloud 감사(audit) 로그는 클라우드 이용자가 가장 주의깊게 확인해야 하는 로그입니다. Google Cloud에서 발생하는 중요 로그가 이 항목에 저장되기 때문입니다. Cloud audit 로그는 관리자 행위( Admin activity), 데이터 접근(Data Access), 시스템 이벤트 로그 등을 저장합니다.
Google Cloud에서 사용하는 관리자 행위라는 단어는 일반적인 개념과 조금 다릅니다. Zero Trust 기반의 보안 정책을 적용하는 Google Cloud는 모든 권한을 보유하고 있는 전통적인 시스템 관리자(root)와 다른 개념을 적용합니다.
Google Cloud에서 Admin activity 로깅은 관리자(Admin)보다 행위(Activity)에 초점이 맞춰져 있습니다. 그러므로 관리자 행위로그는 관리자가 실행한 명령이 아니라 관리 행위의 로그입니다. 예를 들자면 Compute Engine(가상머신)을 신규 생성했거나, 해당 Compute Engine의 환경 설정을 변경하는 것 등이 관리자 행위로 인식됩니다. 자원에 기존 상태에 변경을 가하는 모든 행위가 관리 행위가 되는 것입니다. Google Cloud에서 모든 객체가 자원으로 관리되는 것을 감안하면 관리자 행위는 자원의 생성, 변경, 삭제을 의미하며 이를 기록하는 것이 관리자 행위 로그입니다. 권한을 가진 사용자는 누구라도 해당 행위를 실행할 수 있으므로 반드시 관리자(Admin)일 필요는 없는 것입니다.
데이터 접근(Data Access) 로그는 자원의 환경설정 읽기, 데이터를 읽거나 쓰는 API 호출 기록을 포함합니다. 대단히 많은 자원이 클라우드에 생성되고 운영중이기 때문에 데이터 접근 로그는 기본적으로 비활성화되어 있습니다. 그러므로 해당 로그를 저장하려면 권한있는 사용자가 로그 저장 기능을 활성화시켜야 합니다. 데이터 접근 로그를 활성화시키려면 웹 콘솔 로그인 -> IAM & Admin -> Audit Logs 메뉴로 이동해서 API별 로그 활성화를 설정하면 데이터 접근 로그를 저장할 수 있습니다.
데이터 접근로그는 생각보다 방대한 양의 로그를 생성합니다. 이 모든 로그를 저장하기 위해서는 로그 저장 비용이 발생하기 때문에 접근 로그 저장시 다음의 기준을 제안드립니다.
- 불특정 다수에게 공개된 자원의 데이터 접근 기록은 기록하지 않기
- 로그 노이즈를 감소시키기 위해서 사용자/서비스 계정의 면제 적용
- 조직 또는 폴더에서 프로젝트로 상속하는 데이터 접근 로그 정책 설정
데이터 접근 로그는 비정상적인 접근, 내부 관리자 계정 도용이나 클라우드 내부 자원의 침해 여부를 판별하는데 도움을 줄 수 있습니다.
Google Cloud 로그 보관 기간
로그를 생성하는 것만큼 중요한 것은 로그를 보관하고 이를 활용하는 것입니다. Google Cloud는 다음 표와 같이 로그 타입별로 기본 보관 기한을 제공합니다. 관리자 행위 감사로그는 생성 후 400일을 저장합니다.
Google Cloud 로그 외부 전송
Google Cloud에서 생성되는 로그는 json 형식으로 저장되고 로그 탐색기에서 검색하거나 분석할 수 있습니다. 해당 로그의 상세 분석, 로그 백업 등을 위한 외부 전송 대상은 BigQuery, 클라우드 스토리지를 들 수 있습니다. 하지만 경우에 따라서 Google Cloud에서 생성된 로그를 사용자가 직접 운영하는 로그 분석시스템으로 통합하는 경우도 있습니다. 이 때는 Cloud Pub/Sub을 이용해서 목표시스템에 실시간으로 로그를 전송할 수 있습니다.
로그는 클라우드를 운영하는 관리자, 보안 관리자, 응용 프로그램 개발자 등에게 매우 유용한 정보를 제공합니다. IT 환경에 각종 문제가 발생하면 로그 분석부터 시작하는 것이 당연한 일입니다. 클라우드 시스템도 이와 다르지 않습니다.
클라우드 환경은 로그 수집과 분석 면에서는 온-프레미스보다 더 나은 환경을 제공하고 있습니다. 다양한 이기종 장비에서 발생하는 로그를 수집하기 위해서 각종 환경 설정 추가, 에이전트 설치 과정이 필요합니다. 그렇게 수집한 로그들은 제조사가 모두 다르기 때문에 로그 필드, 형식 등을 이해하기 위해서 많은 시간을 투자해서 분석해야 합니다.
다행히 Google Cloud 환경은 이러한 노력을 하지 않아도 됩니다. 모든 로그는 프로젝트 마다 생성된 로그 버킷에 자동으로 저장됩니다. 사용자는 로그를 저장하겠다는 설정만 하시면 됩니다. 또한 모든 Google Cloud로그는 표준 로그 형식을 가지고 있습니다. 클라우드 내에서도 다양한 제품이 있지만 저장하는 로그 형식은 거의 동일하기 때문에 손쉬운 로그 분석을 시행할 수 있습니다.
운영중인 클라우드 환경마다 적절한 로그 저장 및 설정을 통하여 안정적이고 안전한 클라우드 환경을 운영하시기 바랍니다.