활동 로그에서 감사 로그로 마이그레이션


활동 로그를 사용하여 Compute Engine 관리자 활동 및 시스템 이벤트를 보는 경우 이 가이드를 읽고 감사 로그를 대신 사용하여 유사한 로그 항목을 찾는 방법을 알아보세요.

Compute Engine 활동 로그는 지원 중단되었습니다. 로그 이름을 기준으로 활동 로그 항목을 식별할 수 있습니다.

logName: "projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log"

Compute Engine 감사 로그에는 활동 로그를 통해 제공되는 것과 동일한 정보가 포함됩니다. 그러나 감사 로그는 활동 로그와는 다른 방식으로 정보를 제공합니다. 따라서 쿼리를 조정해야 합니다.

활동 로그에서 감사 로그로 이전하는 방법

활동 로그 대신 감사 로그를 사용하려면 쿼리를 조정하세요. 다음 단계를 따르세요.

  1. 이전 쿼리를 찾습니다. 예를 들어 로그 탐색기에서 저장된 검색 결과에 쿼리를 저장했거나 API 또는 SDK를 사용하여 스크립트를 만들었을 수 있습니다. 리소스를 모니터링하는 방법에 대한 자세한 내용은 로깅 문서를 참조하세요.

  2. 활동 로그 필드를 적절한 감사 로그 필드로 바꿉니다. 필드가 서로 어떻게 매핑되는지 보려면 를 참조하세요.

    예를 들어 기존 활동 로그 쿼리가 jsonPayload.resource.name이라는 필드를 찾으면 새 감사 로그 쿼리가 protoPayload.resourceName을 대신 찾아야 합니다.

  3. 새 감사 로그 쿼리를 저장하고 사용합니다. 예를 들어 Cloud Logging에서 저장된 검색을 만들거나 스크립트를 업데이트합니다.

예시

다음은 변환된 쿼리의 예시입니다.

특정 리소스와 관련된 활동 쿼리

쿼리 예시
기존 활동 로그gcloud logging read jsonPayload.resource.name="VM_NAME"
감사 로그

다음 옵션 중 하나를 사용합니다.

  1. gcloud logging read protoPayload.resourceName:"VM_NAME"
  2. gcloud logging read protoPayload.resourceName="projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

옵션 1을 사용하면 'has'(:) 연산자가 이름에 VM_NAME이 포함된 모든 프로젝트 리소스와 일치합니다. 옵션 2를 사용하면 'equals'(=) 연산자가 해당 이름의 정규화된 특정 리소스와만 일치합니다.

최근 관리자 활동 로그 항목 쿼리

쿼리 예시
기존 활동 로그gcloud logging read logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log"
감사 로그gcloud logging read logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

최근 인스턴스 생성 로그 항목 쿼리

쿼리 예시
기존 활동 로그gcloud logging read 'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log" AND jsonPayload.event_subtype="compute.instances.insert"'
감사 로그gcloud logging read 'logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" AND protoPayload.methodName:"compute.instances.insert"'

모든 인스턴스 만들기 작업 시작 쿼리

쿼리 예시
기존 활동 로그gcloud logging read 'jsonPayload.event_type="GCE_API_CALL" AND jsonPayload.event_subtype="compute.instances.insert"'
감사 로그gcloud logging read 'operation.first="true" AND protoPayload.methodName:"compute.instances.insert"'

작업 완료 쿼리

쿼리 예시
기존 활동 로그gcloud logging read jsonPayload.event_type="GCE_OPERATION_DONE"
감사 로그gcloud logging read operation.last="true"

활동 로그와 감사 로그의 차이점

이 섹션에서 감사 로그가 활동 로그와 어떻게 다르게 구성되어 있는지 알아보세요. 이전 활동 로그 쿼리를 감사 로그 쿼리로 변환할 때 이러한 차이점을 염두에 두시기 바랍니다. 예를 들어 쿼리에서 모든 기존 활동 로그 필드 이름을 해당하는 감사 로그 필드 이름으로 바꿉니다.

감사 로깅과 활동 로깅 모두 로그 항목 객체를 반환하지만 다음과 같은 차이점이 있습니다.

  • 다른 필드 이름 사용 자세한 내용은 필드 이름 매핑 표를 참조하세요.
  • 다른 필드 값 사용:
    • 다른 로그 이름 사용: 감사 로그의 로그 이름에 cloudaudit.googleapis.com이 포함됩니다.
    • 다른 페이로드 사용: 감사 로그가 jsonPayload 대신 protoPayload 필드를 반환합니다.
    • 정규화된 리소스 이름 사용: 감사 로그가 경로가 포함된 리소스 이름(예 : projects/my-project/zones/us-east1-b/instances/my-instance-name)을 반환합니다.
    • 버전이 지정된 메서드 이름 사용: 감사 로그가 버전이 포함된 메서드 이름(예: v1)을 반환합니다.

다음은 로그 이름과 페이로드의 차이를 보여주는 예시입니다.

로그 항목 예시
기존 활동 로그
{
  insertId:  "1x3bbhjg2wwvz1x"
  jsonPayload: {
    event_subtype: "compute.instances.stop"
    ...
    resource: {
      id: "12345678900123456789"
      name: "my-instance-name"
      type: "instance"
      zone: "us-east1-b"
    }
    ...
  }
  labels: {…}
  logName:  "projects/my-project/logs/compute.googleapis.com%2Factivity_log"
  receiveTimestamp:  "2019-08-26T12:22:44.602794616Z"
  ...
}
감사 로그
{
  insertId:  "-w6o499e22fwk"
  logName:  "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"
  protoPayload: {
    ...
    methodName: "beta.compute.instances.stop"
    ...
    resourceName: "projects/my-project/zones/us-east1-b/instances/my-instance-name"
  }
  receiveTimestamp:  "2019-08-26T12:22:46.881198276Z"
  ...
}

활동 로그에서 감사 로그로 필드 매핑

다음 표를 사용하여 활동 로그 필드를 쿼리의 해당 감사 로그 필드에 매핑합니다.

필드

다음 표를 사용하여 업데이트된 쿼리에서 기존 활동 로그 필드를 감사 로그 필드로 바꿉니다.

예를 들어 기존 활동 로그 쿼리에 jsonPayload.resource.type을 기준으로 한 필터가 포함되었다면 새 감사 로그 쿼리에서는 그 대신 resource.type을 기준으로 필터링해야 합니다.

기존 활동 로그 필드 감사 로그 필드
insertId insertId
jsonPayload.actor.user protoPayload.authenticationInfo.principalEmail
jsonPayload.event_subtype protoPayload.methodName
jsonPayload.event_timestamp_us timestamp
jsonPayload.event_type="GCE_API_CALL" operation.first="true"
jsonPayload.event_type="GCE_OPERATION_DONE" operation.last="true"
jsonPayload.request protoPayload.request
jsonPayload.operation operation
jsonPayload.resource.id resource.labels.instance_id
jsonPayload.resource.name protoPayload.resourceName
jsonPayload.resource.type resource.type
jsonPayload.resource.zone resource.labels.zone
jsonPayload.trace_id operation.id
jsonPayload.user_agent protoPayload.requestMetadata.callerSuppliedUserAgent
labels.compute.googleapis.com/resource_id resource.labels.[RESOURCE_TYPE]_id
labels.compute.googleapis.com/resource_name protoPayload.resourceName
labels.compute.googleapis.com/resource_type resource.type
labels.compute.googleapis.com/resource_zone 다음 중 하나:
  • resource.labels.zone
  • resource.labels.region
  • resource.labels.location
logName logName
receiveTimestamp receiveTimestamp
resource.labels resource.labels
severity severity
timestamp timestamp

필드 값

다음 표를 사용하여 기존 활동 로그 필드 값을 감사 로그 필드 값에 매핑합니다. 감사 로그는 활동 로그와 비교하여 여러 로그 이름 값과 다른 페이로드 값을 가집니다. 감사 로그 항목은 정규화된 리소스 이름과 버전이 지정된 메서드 이름도 반환합니다.

로그 이름

감사 로그 항목을 찾으려면 cloudaudit.googleapis.com이 포함된 logName을 찾습니다.

로그 이름로그 내용
기존 활동 로그projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log관리자 활동 및 시스템 이벤트
감사 로그projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity관리자 활동
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event시스템 이벤트
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access데이터 액세스

페이로드

각 감사 로그 항목에서 jsonPayload 대신 protoPayload를 찾습니다.

페이로드 유형페이로드 예시
기존 활동 로그jsonPayload
    jsonPayload: {
      actor: {…}
      event_subtype:  "compute.instances.start"
      event_timestamp_us:  "1566404493487248"
      event_type:  "GCE_API_CALL"
      ip_address:  ""
      operation: {…}
      request: {…}
      resource: {…}
      trace_id:  "operation-1566404491560-590a2f74b4705-a1ae0686-d896d772"
      user_agent:  "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
      version:  "1.2"
    }
감사 로그protoPayload
    protoPayload: {
      @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
      authenticationInfo: {…}
      methodName:  "v1.compute.instances.start"
      request: {…}
      requestMetadata: {…}
      resourceName:  "projects/my-project/zones/us-central1-a/instances/alert"
      serviceName:  "compute.googleapis.com"
    }

이러한 페이로드 간의 관계와 기존 활동 로그 필드를 감사 로그 필드에 매핑하는 방법을 알아보려면 로그 항목 필드 매핑을 읽어보세요.

리소스 이름

감사 로그에서 protoPayload.resourceName 필드의 API 리소스 이름은 다음과 같이 정규화됩니다.

resourceName: "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

부분 이름을 계속 사용할 수 있지만 'equals' 연산자 대신 'has' 연산자(:)를 사용하도록 쿼리를 수정해야 합니다.

감사 로그 쿼리에서 다음 옵션 중 하나를 사용하여 특정 리소스에 필터를 적용합니다.

  • gcloud logging read protoPayload.resourceName:"VM_NAME"
  • gcloud logging read protoPayload.resourceName="projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

메서드 이름

감사 로그의 protoPayload.methodName 필드에서 API 메서드 이름에는 버전 프리픽스가 사용됩니다(예: v1.compute.instances.delete).

필드쿼리 예시
기존 활동 로그jsonPayload.event_subtypeRESOURCE.METHODjsonPayload.event_subtype=compute.instances.delete
감사 로그protoPayload.methodNameAPI_VERSION.RESOURCE.METHODprotoPayload.methodName=v1.compute.instances.delete
또는
protoPayload.methodName=beta.compute.instances.delete
또는
protoPayload.methodName:compute.instances.delete

감사 로그 쿼리에서 버전이 지정되지 않은 메서드 이름을 계속 사용할 수 있지만 'equals' 연산자(=) 대신 'has' 연산자(:)를 사용하도록 쿼리를 수정해야 합니다. 예를 들어 protoPayload.methodName:compute.instances.delete는 버전에 관계없이 모든 인스턴스 삭제 API 호출을 반환합니다. 연산자에 대한 자세한 내용은 비교를 참조하세요.

다음 단계