1. 개요
기업은 조직의 각종 규정 준수 요구 사항을 충족하고, 감사 대응을 위해 다양한 종류의 로그를 생성하며 이를 보관 및 관리하여야만 합니다. GCP는 이러한 요구사항을 충족시키기 위하여 Cloud Logging에서 발생하는 로그를 기업의 요구 사항에 맞게 관리할 수 있는 방안을 지원하고 있습니다. 이 글에서는 기업의 규정 준수 요구사항을 충족하기 위한 Cloud Logging에 대한 이해와 이를 위한 자세한 방법을 다루어 보도록 하겠습니다.
2. 로그의 종류와 이해
로그의 종류는 크게 Audit로그와 그 외의 일반로그로 분류되며, Audit 로그는 각종 감사 요구사항에 필수적으로 활용되는 기본적인 로그입니다.
또한 Audit 로그는 내용에 따라 세부적인 분류로 나뉩니다.
- Admin Activity Audit 로그
클라우드 플랫폼 상에서 일어나는 구성변경, 접근 이력 등을 의미하는 로그로, 구글 API 호출 관련 로그 항목, 리소스의 구성 또는 메타데이터를 수정하는 작업 이력 등을 포함합니다. 해당로그는 아래의 Cloud Logging Filter를 이용하여 조회되는 항목입니다.logName=projects/[PROJECT | FOLDER | ORGANIGATION_ID]
/logs/cloudaudit.googleapis.com%2Factivity - System Event Audit 로그는 리소스 구성을 수정하는 Google Cloud 작업의 로그 항목으로 Google 시스템에서 생성됩니다. GCE의 Live Migration 로그와 구글 인프라 상에서 발생하는 인스턴스의 시스템 이벤 로그 등이 이에 해당됩니다.
logName=projects/[PROJECT | FOLDER |
ORGANIGATION_ID]/logs/cloudaudit.googleapis.com%2Fsystem_event - Data Access Audit 로그는 Google API와 GCP 리소스에 대한 접근/변경 이력에 대한 로그 정보를 포함하고 있습니다.
logName=projects/[PROJECT | FOLDER |
ORGANIGATION_ID]/logs/cloudaudit.googleapis.com%2Fdata_access또한 Data Access Audit 로그는 다시 아래와 같은 종류의 로그로 구분됩니다.
- Admin Read : GCP 리소스에 대한 메타데이터 또는 구성 정보 Read 기록, 비활성화 불가능
- Data Read
- Data Write
Data Access Audit 로그는 요구 사항에 따라 IAM & Admin 콘솔에서 서비스 별로 Data Access Audit 로그의 활성/비활성을 설정할 수 있습니다.
3. 로그 버킷
로그 버킷은 Cloud Logging으로 전송된 로그들을 위한 별도 저장소입니다. 로그 버킷은 프로젝트 별로 기본적으로 생성되며 이를 위한 기본 Sink 정책이 자동적으로 구성됩니다. 사용자는 조직의 요구 조건에 따라 별도의 로그 버킷을 생성하여 사용자 정의 보관 정책등을 구성할 수 있습니다.
- 로그 버킷의 종류
- _Required
- Admin Activity Audit, System Event Audit, Access Transparency 로그
- 무료 로그, 400일 동안 보관, 보관기간 및 삭제 불가능
- _Default
- _Required 저장 로그를 제외한 모든 수집 로그 저장
- 표준 Cloud Logging 가격 책정 적용
- 커스텀 보관 기간을 적용하지 않는 한 30일 보관
- 버킷 삭제 불가능, 로그를 이 버킷으로 라우팅하는 _Default 로그 싱크 사용 중지 가능
- Custom
- 커스텀 보관기간 설정 가능
- 커스텀 보관기간은 최대 10년
- _Required
로그 버킷은 클라우드 콘솔의 Logging > Logs Storage에서 신규 로그 버킷을 생성하거나 기존 로그 버킷을 관리할 수 있습니다.
- 로그 버킷 참고 사항
- 로그 버킷은 버킷을 삭제하거나 수정이 불가능 하도록 잠금을 지원하며 이를 통해 필요에 따라 요건을 충족시킬 수 있습니다.
- 로그 버킷에 수집된 로그는 한번 Log Router를 통하여 버킷에 도달한 로그이므로 Cloud Monitoring의 Log Based Metric은 지원하지 않습니다.
- 특정한 로그만을 제한된 사용자에 보여지도록 권한 설정을 필요로 하는 경우, IAM Condition으로 구현되는 로그 버킷의 커스텀 뷰 보기(현재 Beta) 기능을 활용하여 구성할 수 있습니다.
- 로그 버킷 생성시 Compliance에 요건 등에 따라 특정 리전(asia-east1 / europe-west1 / us-central1 / us-east1 / us-west1)에 로그를 저장하도록 선택 가능합니다. 해당 리전 외 global 설정 시 로그가 물리적으로 저장되는 위치를 특정하지 않게 됩니다.
- 로그 버킷은 삭제시 7일간 대기 상태로 유지 후 완전히 삭제되며 해당 기간내 복구 가능합니다.
- Error Reporting은 Cloud Logging을 기반으로 하는 글로벌 서비스이며, 리전 로그 버킷에 저장된 로그 또는 다른 프로젝트로 라우팅된 로그를 분석하지 않음을 유의해야 합니다.
- 별도의 로그 버킷에 저장된 로그는 클라우드 콘솔의 Log Viewer에서 “Refine Scope” 을 통해 버킷을 지정하여 열람할 수 있습니다.
- 로그 버킷은 버킷을 삭제하거나 수정이 불가능 하도록 잠금을 지원하며 이를 통해 필요에 따라 요건을 충족시킬 수 있습니다.
4. 로그 라우터
Cloud Logging으로 수신된 로그 중 원하는 로그를 Filter로 선별하여 다른 목적지로 재전송하는 기능으로 기업의 각종 로그 관리 요건을 충족하기 위해 널리 활용되는 기능입니다.
해당 기능은 규정 준수를 위해 유지해야 하는 로그를 별도의 로그 버킷에 저장하거나 수집된 로그를 빅데이터 분석 도구로 활용가능하며, 아래 목적지로 내보내기를 저장합니다.
- Log Bucket
- Bigquery
- Cloud Storage Bucket
- Cloud Pub/Sub
- Cloud Monitoring(=Log Based Metric)
로그 라우팅은 각각 프로젝트 레벨, 폴더 레벨, 조직 레벨, 빌링 계정 레벨등의 로그에 대해 설정이 가능합니다. 해당 레벨의 로그 라우팅 설정은 각 레벨에 해당하는 로그만을 포함할 뿐 하위 로그가 포함하는 것은 아님에 유의하여야 합니다. 즉, Organization 레벨의 로그에 대한 Sink를 설정하더라도 Organization 이하 Folder 레벨의 로그가 자동적으로 Sink되는 것이 아닙니다. 특정 리소스 이하에서 전체 내보내기는 Aggregated Sink 기능을 활용하여야 합니다.
5. 조직을 위한 Aggregated Sink
Aggregated Sink는 Cloud Logging의 Log Router를 활용하여, 조직/폴더/프로젝트 레벨 이하의 조건에 부합하는 모든 로그를 지정한 목적지로 전송할 수 있습니다. 설정방법은 gcloud SDK의 명령어를 활용합니다. 예를 들어 아래 명령어를 이용하면 Organization 이하의 모든 Audit 로그를 특정 로그버킷을 취합하여 저장할 수 있습니다.
gcloud logging sinks create [SINK_RULE_NAME] /
logging.googleapis.com/projects/[LOG_BUCKET_PROJECT_ID]/locations/[LOG_BUCKET_REGION]/buckets/[LOG_BUCKET_NAME]
--log-filter='logName:cloudaudit.googleapis.com' \
--description="All audit logs from my org log sink" \
--organization=ORG_NUMBER \
--include-children
*해당 설정을 위해서 로그 버킷 권한 및 뷰어 권한 설정을 필요로 합니다.
- Aggregated Sink 활용시 참고 사항
- 별도의 로그 수집용 프로젝트와 로그 버킷을 권장합니다.
- 수집된 로그에 대하여 보안을 위해 최소 권한 접근 방식의 권한 관리를 적용합니다.
- 필요에 따라 로그 버킷의 로그 Retention 기간의 설정과 잠금 기능을 설정합니다.
- 일상적인 조회가 이루어지는 로그가 아닌, 장기 보관 목적을 필요로 하는 로그의 경우 Cloud Storage로 Sink하여 보관하는 것을 권장합니다.
- Cloud Storage로 Sink 할 경우 저장되는 개체에 대해 Lifecycle 관리 정책을 설정하여 비용절감을 도모할 수 있습니다.
- 예) 60일 후 Nearline 변경 > 120일 후 Coldline 변경 > 2555일(약 7년) 후 로그 삭제
- 조직의 정책과 활용 방식에 따라 Aggregated Sink를 복수로 구성하여 활용합니다.
6. 로그 관리 유의 사항
모든 로그를 저장하는 것이 가장 권장되지만 로그 수집과 저장으로 인해 발생하는 Cloud 비용과 조직의 요구 조건 사이에서 균형점을 선정하여야만 합니다. Cloud Logging은 아래와 같은 가격 정책을 가지고 있습니다.
- Cloud Logging 가격 정책
- 로그 데이터 $0.50/GiB, 프로젝트당 월별 최초 50GiB 무료
- 2021년 3월 31일부터 기본 보관 기간 초과 시 매월 $0.01/GiB의 요금 발생
- 아래 무료 로그를 제외한 모든 로그에 대해서 무료 사용량을 초과하는 로그에 대해 비용 발생
- Admin Activity Audit 및 System Event Audit 로그
- Access Transparency 로그
- 제외 설정된 로그
- Anthos 로그 / Dataflow 로그
- 대량 로그 발생이 우려될 경우, Cloud Monitoring의 로그 발생량 메트릭(“Monthly log bytes ingested”에 대한 모니터링을 적극 권장합니다.
- Sink 기능을 활용하여 다른 GCP 리소스로 내보내기를 구성할 경우 해당 리소스의 비용이 별도 부과됩니다.
- 로그 제외 기능
- 제외 항목은 Logging 할당량으로 집계되지 않음
- 제외 항목은 로그 탐색기에 표시되지 않음 (즉, Error Reporting 또는 Cloud Debugger에서도 사용불가)
- 싱크 대상이 포함된 로그 싱크를 사용하여 Cloud Logging 외부로 로그 항목을 내보내기 가능하며 동시에 수집제외 가능
- 제외 설정 기간 중 이미 제외 처리된 로그는 제외설정을 제거하더라도 조회 불가능함에 유의