Cloud Run 로그 수집
이 가이드에서는 Cloud Storage를 사용하여 Cloud Run 로그를 Google Security Operations로 내보내는 방법을 설명합니다. 파서는 JSON 로그에서 필드를 추출하여 통합 데이터 모델 (UDM)로 변환합니다. HTTP 요청 데이터 및 시스템 감사 로그를 비롯한 다양한 로그 형식을 처리하고 관련 필드를 UDM에 매핑하는 동시에 Cloud Run에 고유한 라벨과 메타데이터로 데이터를 보강합니다.
시작하기 전에
다음 기본 요건이 충족되었는지 확인합니다.
- Google SecOps 인스턴스
- Cloud Run이 your Google Cloud environment에서 설정되고 활성 상태입니다.
- 액세스 권한 관리 Google Cloud
Google Cloud Storage 버킷 만들기
- 콘솔에 로그인합니다.Google Cloud
Cloud Storage 버킷 페이지로 이동합니다.
만들기를 클릭합니다.
버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 각 단계를 완료한 후 계속 을 클릭하여 다음 단계로 진행합니다.
시작하기 섹션에서 다음을 수행합니다.
- 버킷 이름 요구사항을 충족하는 고유한 이름을 입력합니다(예: cloudrun-logs ).
계층적 네임스페이스를 사용 설정하려면 펼치기 화살표를 클릭하여 파일 지향 및 데이터 집약적인 워크로드에 최적화 섹션을 펼친 다음 이 버킷에서 계층적 네임스페이스 사용 설정 을 선택합니다.
버킷 라벨을 추가하려면 펼치기 화살표를 클릭하여 라벨 섹션을 펼칩니다.
라벨 추가를 클릭하고 라벨의 키와 값을 지정합니다.
데이터 저장 위치 선택 섹션에서 다음을 수행합니다.
- 위치 유형 을 선택합니다.
위치 유형 메뉴를 사용하여 버킷 내 객체 데이터가 영구적으로 저장될 위치 를 선택합니다.
버킷 간 복제를 설정하려면 버킷 간 복제 설정 섹션을 펼칩니다.
데이터의 스토리지 클래스 선택 섹션에서 버킷에 기본 스토리지 클래스 를 선택하거나, 버킷 데이터의 자동 스토리지 클래스 관리에 자동 클래스 를 선택합니다.
객체 액세스를 제어하는 방식 선택 섹션에서 공개 액세스 방지를 적용하지 않도록 선택하고 버킷의 객체에 대한 액세스 제어 모델을 선택합니다.
객체 데이터 보호 방법 선택 섹션에서 다음을 수행합니다.
- 버킷에 설정할 데이터 보호 아래의 옵션을 선택합니다.
- 객체 데이터가 암호화되는 방식을 선택하려면 데이터 암호화 라는 라벨이 표시된 펼치기 화살표를 클릭하고 데이터 암호화 방법 을 선택합니다.
만들기 를 클릭합니다.
Cloud Run에서 로그 내보내기 구성
- Google Cloud 시작 페이지에서 Cloud Run 아이콘을 클릭합니다.
- 상단의 검색창에 로깅 을 검색하고 Enter 키를 누릅니다.
- 로그 탐색기의 로그 이름에서 Cloud Run을 선택하여 로그를 필터링하고 적용을 클릭합니다.
- 메뉴에서 작업 더보기 > 싱크 만들기 를 클릭합니다.
- 다음 구성을 제공합니다.
- 싱크 세부정보: 이름과 설명을 입력합니다.
- 다음 을 클릭합니다.
- 싱크 대상: Cloud Storage 버킷을 선택합니다.
- Cloud Storage 버킷: 이전에 만든 버킷을 선택하거나 새 버킷을 만듭니다.
- 다음 을 클릭합니다.
- 싱크에 포함할 로그 선택: Cloud Storage 버킷에서 옵션을 선택하면 기본 로그가 채워집니다.
- 다음 을 클릭합니다.
- (선택사항) 싱크에서 필터링할 로그 선택: 싱크하지 않을 로그를 선택합니다.
- 싱크 만들기 를 클릭합니다.
피드 설정
피드를 구성하려면 다음 단계를 따르세요.
- SIEM 설정 > 피드 로 이동합니다.
- 새 피드 추가 를 클릭합니다.
- 다음 페이지에서 단일 피드 구성 을 클릭합니다.
- 피드 이름 필드에 피드 이름을 입력합니다(예: Cloud Run 로그 ).
- 소스 유형 으로 Google Cloud Storage V2 를 선택합니다.
- 로그 유형 으로 GCP Cloud Run 을 선택합니다.
- Chronicle 서비스 계정 으로 서비스 계정 가져오기 를 클릭합니다.
- 다음 을 클릭합니다.
다음 입력 매개변수의 값을 지정합니다.
- 스토리지 버킷 URI: Google Cloud
gs://my-bucket/<value>/형식의 스토리지 버킷 URL입니다. 이 URL은 후행 슬래시 (/)로 끝나야 합니다. 소스 삭제 옵션: 환경설정에 따라 삭제 옵션을 선택합니다.
최대 파일 기간: 지난 며칠 동안 수정된 파일을 포함합니다. 기본값은 180일입니다.
- 스토리지 버킷 URI: Google Cloud
다음 을 클릭합니다.
확정 화면에서 새 피드 구성을 검토한 다음 제출 을 클릭합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 논리 |
|---|---|---|
httpRequest.latency |
target.resource.attribute.labels.[] |
원시 로그의 httpRequest.latency 값이 target.resource.attribute.labels 내에서 키가 http_request_latency인 라벨의 값으로 사용됩니다. |
httpRequest.protocol |
network.application_protocol |
httpRequest.protocol에 HTTP가 포함된 경우 UDM 필드가 HTTP로 설정됩니다. |
httpRequest.remoteIp |
principal.asset.ip |
원시 로그의 httpRequest.remoteIp 값이 사용됩니다. |
httpRequest.remoteIp |
principal.ip |
원시 로그의 httpRequest.remoteIp 값이 사용됩니다. |
httpRequest.requestMethod |
network.http.method |
원시 로그의 httpRequest.requestMethod 값이 사용됩니다. |
httpRequest.requestSize |
network.sent_bytes |
원시 로그의 httpRequest.requestSize 값이 부호 없는 정수로 변환되어 사용됩니다. |
httpRequest.requestUrl |
target.url |
원시 로그의 httpRequest.requestUrl 값이 사용됩니다. |
httpRequest.responseSize |
network.received_bytes |
원시 로그의 httpRequest.responseSize 값이 부호 없는 정수로 변환되어 사용됩니다. |
httpRequest.serverIp |
target.asset.ip |
원시 로그의 httpRequest.serverIp 값이 사용됩니다. |
httpRequest.serverIp |
target.ip |
원시 로그의 httpRequest.serverIp 값이 사용됩니다. |
httpRequest.status |
network.http.response_code |
원시 로그의 httpRequest.status 값이 정수로 변환되어 사용됩니다. |
httpRequest.userAgent |
network.http.parsed_user_agent |
원시 로그의 httpRequest.userAgent 값이 사용자 에이전트 문자열로 파싱됩니다. |
httpRequest.userAgent |
network.http.user_agent |
원시 로그의 httpRequest.userAgent 값이 사용됩니다. |
insertId |
metadata.product_log_id |
원시 로그의 insertId 값이 사용됩니다. |
labels.instanceId |
additional.fields.[] |
labels.instanceId 값이 additional.fields 내에서 키가 instanceId인 라벨의 값으로 사용됩니다. |
labels.run.googleapis.com_execution_name |
additional.fields.[] |
labels.run.googleapis.com_execution_name 값이 additional.fields 내에서 키가 execution_name인 라벨의 값으로 사용됩니다. |
labels.run.googleapis.com_task_attempt |
additional.fields.[] |
labels.run.googleapis.com_task_attempt 값이 additional.fields 내에서 키가 task_attempt인 라벨의 값으로 사용됩니다. |
labels.run.googleapis.com_task_index |
additional.fields.[] |
labels.run.googleapis.com_task_index 값이 additional.fields 내에서 키가 task_index인 라벨의 값으로 사용됩니다. |
logName |
metadata.product_event_type |
원시 로그의 logName 값이 사용됩니다. |
resource.labels.configuration_name |
target.resource.attribute.labels.[] |
resource.labels.configuration_name 값이 target.resource.attribute.labels 내에서 키가 configuration_name인 라벨의 값으로 사용됩니다. |
resource.labels.job_name |
additional.fields.[] |
resource.labels.job_name 값이 additional.fields 내에서 키가 job_name인 라벨의 값으로 사용됩니다. |
resource.labels.location |
target.location.name |
원시 로그의 resource.labels.location 값이 사용됩니다. |
resource.labels.project_id |
target.resource.attribute.labels.[] |
resource.labels.project_id 값이 target.resource.attribute.labels 내에서 키가 project_id인 라벨의 값으로 사용됩니다. |
resource.labels.revision_name |
target.resource.attribute.labels.[] |
resource.labels.revision_name 값이 target.resource.attribute.labels 내에서 키가 revision_name인 라벨의 값으로 사용됩니다. |
resource.labels.service_name |
target.resource.attribute.labels.[] |
resource.labels.service_name 값이 target.resource.attribute.labels 내에서 키가 service_name인 라벨의 값으로 사용됩니다. |
resource.type |
target.resource.resource_subtype |
원시 로그의 resource.type 값이 사용됩니다. |
severity |
security_result.severity |
severity 값이 Info (대소문자 구분 없음)와 일치하면 UDM 필드가 INFORMATIONAL로 설정됩니다. |
textPayload |
additional.fields.[] |
textPayload 값이 additional.fields 내에서 키가 Textpayload인 라벨의 값으로 사용됩니다. |
timestamp |
metadata.event_timestamp |
원시 로그의 timestamp 값이 타임스탬프로 파싱됩니다. |
timestamp |
timestamp |
원시 로그의 timestamp 값이 타임스탬프로 파싱됩니다. 특정 필드의 존재 여부에 따라 파서 논리로 결정됩니다. 기본값은 GENERIC_EVENT입니다. has_principal_ip, has_target_ip, httpRequest.protocol이 HTTP와 일치하면 NETWORK_HTTP로 설정됩니다. GCP_RUN으로 하드코딩됩니다. GCP_RUN으로 하드코딩됩니다. Google Cloud Platform으로 하드코딩됩니다. GOOGLE_CLOUD_PLATFORM으로 하드코딩됩니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.