집계 싱크 구성

이 문서에서는 집계 싱크를 만드는 방법을 설명합니다. 기존 싱크 관리에 대한 자세한 내용은 싱크 구성 및 관리를 참조하세요.

개요

집계 싱크는 조직 또는 폴더에 포함된 Google Cloud 리소스의 로그 항목을 결합하고 라우팅합니다. 예를 들어 조직에 포함된 모든 폴더에서 감사 로그 항목을 집계하고 Cloud Storage 버킷으로 라우팅할 수 있습니다.

집계 싱크 기능이 없으면 싱크는 싱크가 생성된 정확한 리소스, 즉 Google Cloud 프로젝트, 조직, 폴더 또는 결제 계정의 로그 항목만 라우팅할 수 있습니다.

Google Cloud 폴더 및 조직의 집계 싱크를 만들 수 있습니다. 클라우드 프로젝트나 결제 계정에는 하위 리소스가 없으므로 해당 리소스에 대한 집계 싱크를 만들 수 없습니다.

지원되는 대상

집계 싱크를 사용하여 동일한 조직 및 폴더 내 또는 사이에서의 로그를 라우팅할 수 있습니다.

  • Cloud Storage: Cloud Storage 버킷에 저장된 JSON 파일입니다.
  • Pub/Sub: Pub/Sub 주제로 제공된 JSON 메시지 Logging과 함께 Splunk와 같은 타사 통합을 지원합니다.
  • BigQuery: BigQuery 데이터 세트에 생성된 테이블입니다.
  • 다른 Cloud Logging 버킷: Cloud Logging 로그 버킷에 있는 로그 항목입니다.

시작하기 전에

싱크를 만들기 전에 먼저 다음을 확인합니다.

  • 로그 탐색기에서 볼 수 있는 로그가 포함된 Google Cloud 폴더 또는 조직이 있습니다.

  • 로그를 라우팅할 Google Cloud 조직 또는 폴더에 다음 IAM 역할 중 하나가 있습니다.

    • 소유자(roles/owner)
    • Logging 관리자(roles/logging.admin)
    • 로그 구성 작성자(roles/logging.configWriter)

    이러한 역할에 포함된 권한은 싱크를 생성, 삭제 또는 수정할 수 있게 해줍니다. IAM 역할 설정에 대한 자세한 내용은 Logging 액세스 제어 가이드를 참조하세요.

  • 지원되는 대상에 리소스가 있거나 이를 만들 수 있어야 합니다.

    라우팅 대상은 gcloud 명령줄 도구, Cloud Console, Google Cloud API를 사용하여 싱크 전에 만들어야 합니다. 모든 조직의 모든 Cloud 프로젝트에서 대상을 만들 수 있지만 싱크의 서비스 계정에 대상에 쓰기 권한이 있는지 확인해야 합니다.

집계 싱크 만들기

집계 싱크를 사용하려면 Google Cloud 조직 또는 폴더에서 싱크를 만들고 싱크의 includeChildren 매개변수를 True로 설정합니다. 그러면 싱크가 조직 또는 폴더에서 그리고 포함된 폴더, 결제 계정 또는 클라우드 프로젝트에서 (재귀적으로) 로그 항목을 라우팅할 수 있습니다. 싱크의 포함 및 제외 필터를 설정하여 대상으로 라우팅할 로그 항목을 지정합니다.

폴더 또는 조직당 싱크를 최대 200개까지 만들 수 있습니다.

폴더 또는 조직의 집계 싱크를 만들려면 다음을 수행하세요.

Console

  1. Cloud Console에서 Logging > 로그 라우터 페이지로 이동합니다.

    로그 라우터로 이동

  2. 기존 폴더 또는 조직을 선택합니다.

  3. 싱크 만들기를 선택합니다.

  4. 싱크 세부정보 패널에서 다음 세부정보를 입력합니다.

    • 싱크 이름: 싱크의 식별자를 제공합니다. 싱크를 만든 후에는 싱크 이름을 바꿀 수 없지만 이를 삭제하고 새 싱크를 만들 수 있습니다.

    • 싱크 설명(선택사항): 싱크의 목적 또는 사용 사례를 설명합니다.

  5. 싱크 대상 패널에서 싱크 서비스 및 대상을 선택합니다.

    • 싱크 서비스 선택: 로그를 라우팅할 서비스를 선택합니다.

    선택한 서비스를 기준으로 다음 대상 중에서 선택할 수 있습니다.

    • Cloud Logging 버킷: Logging 버킷을 선택하거나 만듭니다.
    • BigQuery 테이블: 라우팅된 로그를 수신할 특정 데이터 세트를 선택하거나 만듭니다. 파티션을 나눈 테이블도 사용할 수 있습니다.
    • Cloud Storage 버킷: 라우팅된 로그를 수신할 특정 Cloud Storage 버킷을 선택하거나 만듭니다.
    • Pub/Sub 주제: 라우팅된 로그를 수신할 특정 주제를 선택하거나 만듭니다.
    • Splunk: Splunk 서비스에 대한 Pub/Sub 주제를 선택합니다.

      예를 들어 싱크 대상이 BigQuery 데이터 세트이면 싱크 대상은 다음과 같습니다.

      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
      
  6. 싱크에 포함할 로그 선택 패널에서 다음을 수행합니다.

    1. 이 리소스와 모든 하위 리소스에서 수집한 로그 포함을 선택하여 집계 싱크를 만듭니다.

    2. 포함 필터 만들기 필드에서 포함하려는 로그 항목과 일치하는 필터 표현식을 입력합니다. 필터를 설정하지 않으면 선택한 리소스의 모든 로그가 대상으로 라우팅됩니다.

      예를 들어 데이터 액세스 로그를 단일 Logging 버킷으로 라우팅하도록 필터를 빌드해야 할 수 있습니다. 이 필터는 다음과 같습니다.

      LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
      

      필터의 길이는 20,000자를 초과할 수 없습니다.

    3. 올바른 필터를 입력했는지 확인하려면 미리보기 로그를 선택합니다. 그러면 필터가 미리 채워진 새 탭에서 로그 탐색기가 열립니다.

  7. (선택사항) 싱크에서 제외할 로그 선택 패널에서 다음을 수행합니다.

    1. 제외 필터 이름 필드에 이름을 입력합니다.

    2. 제외 필터 빌드 필드에서 제외할 로그 항목과 일치하는 필터 표현식을 입력합니다. 또한 sample 함수를 사용하여 제외할 로그 항목 부분을 선택할 수 있습니다.

    싱크당 최대 50개의 제외 필터를 만들 수 있습니다. 필터의 길이는 20,000자를 초과할 수 없습니다.

  8. 싱크 만들기를 선택합니다.

API

싱크를 만들려면 Logging API에서 organizations.sinks.create 또는 folders.sinks.create를 사용합니다. 메서드의 인수를 다음과 같이 준비하세요.

  1. parent 매개변수는 싱크를 만들 Google Cloud 조직 또는 폴더로 설정합니다. 이 상위 요소는 다음 중 하나가 되어야 합니다.

    • organizations/ORGANIZATION_ID
    • folders/FOLDER_ID
  2. 메서드 요청 본문의 LogSink 객체에서 다음을 수행합니다.

    • includeChildrenTrue로 설정합니다.

    • filter 속성을 설정합니다. 필터의 길이는 20,000자를 초과할 수 없습니다.

      유용한 필터의 예시는 집계 싱크의 필터 만들기를 참조하세요.

    • 나머지 LogSink 필드는 일반 싱크와 동일하게 설정합니다. 자세한 내용은 싱크 구성 및 관리를 참조하세요.

  3. organizations.sinks.create 또는 folders.sinks.create를 호출하여 싱크를 만듭니다.

  4. API 응답으로 반환된 writer_identity 필드에서 서비스 계정 이름을 검색합니다.

  5. 서비스 계정에 싱크 대상에 대한 쓰기 권한을 부여합니다.

    싱크 대상에 이러한 변경을 적용할 권한이 없으면 이러한 변경을 할 수 있는 사람에게 서비스 계정 이름을 전송합니다.

    서비스 계정에 리소스 권한을 부여하는 방법에 대한 자세한 내용은 대상 권한 설정 섹션을 참조하세요.

gcloud

싱크를 만들려면 logging sinks create 명령어를 사용합니다.

  1. 싱크 이름, 싱크 대상, 필터, 로그를 라우팅하는 폴더 또는 조직의 ID를 입력합니다.

    gcloud logging sinks create SINK_NAME
    SINK_DESTINATION  --include-children \
    --folder=FOLDER_ID filter
    

    예를 들어 폴더 수준에서 집계 싱크를 만들고 대상이 BigQuery 데이터 세트인 경우 명령어는 다음과 같습니다.

    gcloud logging sinks create SINK_NAME \
    bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID --include-children \
    --folder=FOLDER_ID --log-filter="logName:activity"

    참고:

    • 조직 수준에서 싱크를 만들려면 --folder=FOLDER_ID--organization=ORGANIZATION_ID로 바꿉니다.

    • 싱크에 조직 내 모든 리소스를 포함하려면 --include-children 플래그를 설정해야 합니다. 이는 create--organization 플래그를 전달하는 경우에도 해당됩니다. false(기본값)로 설정하면 싱크가 호스트 리소스의 로그만 라우팅합니다.

    • 유용한 필터의 예시는 집계 싱크의 필터 만들기를 참조하세요.

  2. 명령어 결과에서 싱크를 만드는 데 사용된 서비스 계정 이름을 검색합니다.

  3. 서비스 계정에 싱크 대상에 대한 쓰기 권한을 부여합니다.

    싱크 대상에 이러한 변경을 적용할 권한이 없으면 이러한 변경을 할 수 있는 사람에게 서비스 계정 이름을 전송합니다.

    서비스 계정에 리소스 권한을 부여하는 방법에 대한 자세한 내용은 대상 권한 설정 섹션을 참조하세요.

집계 싱크를 위한 필터 만들기

여타 싱크와 마찬가지로 집계 싱크에도 개별 로그 항목을 선택하는 필터가 포함됩니다. 집계 싱크를 만드는 데 사용할 수 있는 필터의 예시는 로그 탐색기를 사용하는 샘플 쿼리를 참조하세요.

다음은 집계 싱크 기능을 사용할 때 유용한 필터 비교의 예시입니다. 일부 예에서는 다음과 같은 표기법을 사용합니다.

  • :은 하위 문자열 연산자입니다. = 연산자를 대체하지 마세요.
  • ...은 추가 필터 비교를 나타냅니다.
  • 변수는 색상별 텍스트로 표시됩니다. 변수 값을 유효한 값으로 바꿉니다.

필터의 길이는 20,000자를 초과할 수 없습니다.

필터링 구문에 대한 자세한 내용은 Logging 쿼리 언어를 참조하세요.

로그 소스 선택

특정 클라우드 프로젝트, 폴더, 조직에서 로그를 라우팅하려면 다음 샘플 비교 중 하나를 사용합니다.

logName:"projects/PROJECT_ID/logs/" AND ... 
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ... 
logName:"folders/FOLDER_ID/logs/" AND ... 
logName:"organizations/ORGANIZATION_ID/logs/" AND ... 

모니터링 리소스 선택

클라우드 프로젝트 내의 특정 모니터링 리소스에서만 로그를 라우팅하려면 여러 가지 비교를 사용하여 리소스를 정확하게 지정합니다.

logName:"projects/PROJECT_ID/logs" AND
resource.type=RESOURCE_TYPE AND
resource.labels.instance_id=INSTANCE_ID

리소스 유형 목록은 모니터링 리소스 유형을 참조하세요.

로그 항목 샘플 선택

로그 항목 중 임의의 샘플을 라우팅하려면 기본 제공 함수 sample을 추가합니다. 예를 들어 현재 필터와 일치하는 로그 항목의 10%만 라우팅하려면 다음과 같이 추가합니다.

sample(insertId, 0.10) AND ...

자세한 내용은 sample 함수를 참조하세요.

Cloud Logging 필터에 대한 자세한 내용은 Logging 쿼리 언어를 참조하세요.

대상 권한 설정

이 섹션에서는 Logging에 Identity and Access Management 권한을 부여하여 싱크의 대상에 로그를 작성할 수 있는 방법을 설명합니다. Logging 역할과 권한 전체 목록은 액세스 제어를 참조하세요.

싱크를 만들면 Logging에서 고유한 작성자 ID라는 싱크의 새로운 서비스 계정을 만듭니다. 싱크 대상은 이 서비스 계정이 로그 항목을 작성하도록 허용해야 합니다. 이 서비스 계정은 Cloud Logging에서 소유 및 관리하는 계정으로, 직접 관리할 수 없습니다. 싱크가 삭제되면 서비스 계정이 삭제됩니다.

서비스 경계로 보호되는 리소스로 로그를 라우팅하려면 해당 싱크의 서비스 계정을 액세스 수준에 추가한 후 대상 서비스 경계에 할당해야 합니다. 비집계 싱크에는 이 작업이 필요하지 않습니다. 자세한 내용은 VPC 서비스 제어: Cloud Logging을 참조하세요.

싱크가 대상으로 라우팅하도록 권한을 설정하려면 다음을 수행합니다.

Console

  1. 새로운 싱크에서 싱크의 작성자 ID(이메일 주소)를 가져옵니다. 로그 라우터 페이지로 이동하여 메뉴 > 싱크 세부정보 보기를 선택합니다. 작성자 ID가 싱크 세부정보 패널에 표시됩니다.

  2. 대상에 대한 소유자 액세스 권한이 있으면 다음 방식으로 대상에 서비스 계정을 추가하세요.

    • 대상 위치가 Cloud Storage이면 Cloud Storage 버킷에 싱크의 작성자 ID를 추가하고 Storage 객체 생성자 역할을 부여합니다.
    • 대상 위치가 BigQuery이면 데이터 세트에 싱크의 작성자 ID를 추가하고 BigQuery 데이터 편집자 역할을 부여합니다.
    • 대상 위치가 Splunk를 포함하여 Pub/Sub이면 주제에 싱크의 작성자 ID를 추가하고 Pub/Sub 게시자 역할을 부여합니다.
    • 다른 클라우드 프로젝트에 있는 Logging 버킷 대상의 경우 싱크의 작성자 ID를 대상 버킷에 추가하고 여기에 roles/logging.bucketWriter 권한을 부여합니다.

    싱크 대상에 대한 소유자 액세스 권한이 없으면 해당 권한이 있는 사용자에게 작성자 ID 서비스 계정 이름을 보냅니다. 그러면 해당 사용자는 이전 단계의 지침에 따라 작성자 ID를 싱크 대상에 추가해야 합니다.

API

  1. API 메서드 organizations.sinks.get 또는 folders.sinks.get을 호출하여 싱크의 writerIdentity 필드에서 서비스 계정을 가져옵니다.

    서비스 계정은 다음과 유사합니다.

    serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
    
  2. 새 싱크의 작성자 ID를 대상 권한 목록에 추가하여 대상에 작성할 수 있는 작성자 권한을 부여합니다.

    대상에 대해 IAM 소유자 액세스 권한이 있으면 다음 방식으로 대상에 서비스 계정을 추가하세요.

    • 대상 위치가 Cloud Storage이면 Cloud Storage 버킷에 싱크의 작성자 ID를 추가하고 Storage 객체 생성자 역할을 부여합니다.
    • 대상 위치가 BigQuery이면 데이터 세트에 싱크의 작성자 ID를 추가하고 BigQuery 데이터 편집자 역할을 부여합니다.
    • 대상 위치가 Splunk를 포함하여 Pub/Sub이면 주제에 싱크의 작성자 ID를 추가하고 Pub/Sub 게시자 역할을 부여합니다.
    • 다른 클라우드 프로젝트에 있는 Logging 버킷 대상의 경우 싱크의 작성자 ID를 대상 로그 버킷에 추가하고 여기에 roles/logging.bucketWriter 권한을 부여합니다.

    싱크 대상에 대한 소유자 액세스 권한이 없으면 해당 권한이 있는 사용자에게 작성자 ID 서비스 계정 이름을 보냅니다. 그러면 해당 사용자는 이전 단계의 지침에 따라 작성자 ID를 싱크 대상에 추가해야 합니다.

gcloud

  1. 새로운 싱크에서 싱크의 작성자 ID(이메일 주소)를 가져옵니다.

  2. 싱크 writerIdentity 필드에서 서비스 계정을 가져옵니다.

    gcloud logging sinks describe SINK_NAME
    

    서비스 계정은 다음과 유사합니다.

    serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
    
  3. 대상에 대해 IAM 소유자 액세스 권한이 있으면 다음 방식으로 대상에 서비스 계정을 추가하세요.

    • 대상 위치가 Cloud Storage이면 Cloud Storage 버킷에 싱크의 작성자 ID를 추가하고 Storage 객체 생성자 역할을 부여합니다.
    • 대상 위치가 BigQuery이면 데이터 세트에 싱크의 작성자 ID를 추가하고 BigQuery 데이터 편집자 역할을 부여합니다.
    • 대상 위치가 Splunk를 포함하여 Pub/Sub이면 주제에 싱크의 작성자 ID를 추가하고 Pub/Sub 게시자 역할을 부여합니다.
    • 다른 클라우드 프로젝트에 있는 Logging 버킷 대상의 경우 싱크의 작성자 ID를 대상 로그 버킷에 추가하고 여기에 roles/logging.bucketWriter 권한을 부여합니다.

    싱크 대상에 대한 소유자 액세스 권한이 없으면 해당 권한이 있는 사용자에게 작성자 ID 서비스 계정 이름을 보냅니다. 그러면 해당 사용자는 이전 단계의 지침에 따라 작성자 ID를 싱크 대상에 추가해야 합니다.

    예를 들어 다른 클라우드 프로젝트에서 Logging 버킷 간에 로그를 라우팅하는 경우 다음과 같이 서비스 계정에 roles/logging.bucketWriter를 추가합니다.

    1. 대상 Cloud 프로젝트에 대한 Cloud Identity and Access Management 정책을 가져와서 JSON 형식으로 로컬 파일에 작성합니다.

      gcloud projects get-iam-policy DESTINATION_PROJECT_ID --format json > output.json
      
    2. 서비스 계정이 내가 만든 대상에만 쓰기를 수행할 수 있는 IAM 조건을 추가합니다. 예를 들면 다음과 같습니다.

      {
      "bindings": [
       {
         "members": [
           "user:username@gmail.com"
         ],
         "role": "roles/owner"
       },
       {
         "members": [
           "SERVICE_ACCOUNT"
         ],
         "role": "roles/logging.bucketWriter",
         "condition": {
             "title": "Bucket writer condition example",
             "description": "Grants logging.bucketWriter role to service account SERVICE_ACCOUNT used by sink SINK_NAME",
             "expression":
               "resource.name.endsWith(\'locations/global/buckets/BUCKET_ID\')"
         }
       }
      ],
      "etag": "BwWd_6eERR4=",
      "version": 3
      }
    3. IAM 정책을 업데이트합니다.

      gcloud projects set-iam-policy DESTINATION_PROJECT_ID output.json
      

다음 단계