Cloud Storage에 업로드된 파일의 자동 멀웨어 검사 배포

Last reviewed 2023-06-20 UTC

이 문서에서는 Cloud Storage에 업로드된 파일의 멀웨어 검사 자동화에서 아키텍처를 배포하는 방법을 설명합니다.

이 배포 가이드에서는 사용자가 다음 기술의 기본 기능에 익숙하다고 가정합니다.

아키텍처

다음은 이 문서에서 만드는 배포 아키텍처를 보여주는 다이어그램입니다.

멀웨어 검사 파이프라인의 아키텍처

다이어그램은 이 아키텍처에서 관리되는 다음 두 파이프라인을 보여줍니다.

  • 업로드된 파일에 멀웨어가 포함되었는지 확인하는 파일 스캔 파이프라인
  • ClamAV 멀웨어 데이터베이스 미러 업데이트 파이프라인: ClamAV가 사용하는 멀웨어 데이터베이스의 최신 미러를 유지합니다.

아키텍처에 대한 자세한 내용은 Cloud Storage에 업로드된 파일의 멀웨어 검사 자동화를 참조하세요.

목표

  • Cloud Storage 버킷에 ClamAV 멀웨어 정의 데이터베이스의 미러를 빌드하기

  • 다음 함수를 사용하여 Cloud Run 서비스를 빌드하기

    • CllamAV를 사용하여 멀웨어가 있는지 Cloud Storage 버킷의 파일을 스캔하고, 스캔 결과에 따라 스캔된 파일을 정상 버킷 또는 격리 버킷으로 이동
    • Cloud Storage에서 ClamAV 멀웨어 정의 데이터베이스의 미러 유지
  • 파일이 Cloud Storage에 업로드될 때 멀웨어 검사 서비스를 트리거하는 Eventarc 트리거 만들기

  • Cloud Scheduler 작업을 만들어 멀웨어 검사 서비스를 트리거하여 Cloud Storage의 멀웨어 정의 데이터베이스를 미러링하기

비용

이 아키텍처에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build 사용 설정

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. API Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build 사용 설정

    API 사용 설정

  8. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  9. 이 배포에서는 Cloud Shell에서 모든 명령어를 실행합니다.

환경 설정하기

이 섹션에서는 리전과 영역 같이 배포 전반에 사용되는 값의 기본 설정을 할당합니다. 이 배포에서는 us-central1을 Cloud Run 서비스의 리전으로, us를 Eventarc 트리거 및 Cloud Storage 버킷의 위치로 사용합니다.

  1. Cloud Shell에서 리전 및 위치를 포함하여 일반적인 셸 변수를 설정합니다.

    REGION=us-central1
    LOCATION=us
    PROJECT_ID=PROJECT_ID
    SERVICE_NAME="malware-scanner"
    SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
    

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

  2. 프로젝트 ID로 gcloud 환경을 초기화합니다.

    gcloud config set project "${PROJECT_ID}"
    
  3. 3개의 Cloud Storage 버킷을 만들고 각각 고유한 이름을 지정합니다.

    gsutil mb -l "${LOCATION}" "gs://unscanned-${PROJECT_ID}"
    gsutil mb -l "${LOCATION}" "gs://quarantined-${PROJECT_ID}"
    gsutil mb -l "${LOCATION}" "gs://clean-${PROJECT_ID}"
    

    ${PROJECT_ID}는 버킷 이름이 고유한지 확인하는 데 사용합니다.

    이 세 가지 버킷은 파일 스캔 파이프라인 중에 다양한 단계에 업로드된 파일을 보관합니다.

    • unscanned-PROJECT_ID: 스캔되기 전 파일을 보관합니다. 사용자들은 이 버킷에 파일을 업로드합니다.

    • quarantined-PROJECT_ID: 멀웨어 검사 서비스의 검사 결과 멀웨어가 포함된 것으로 판단되는 파일을 보관합니다.

    • clean-PROJECT_ID: 멀웨어 검사 서비스의 검사 결과 비감염 파일을 보관합니다.

  4. 네 번째 Cloud Storage 버킷을 만듭니다.

    gsutil mb -l "${LOCATION}" "gs://cvd-mirror-${PROJECT_ID}"
    

    ${PROJECT_ID}는 버킷 이름이 고유한지 확인하는 데 사용합니다.

    이 버킷 cvd-mirror-PROJECT_ID는 멀웨어 정의 데이터베이스의 로컬 미러를 유지하는 데 사용되므로 ClamAV CDN에서 비율 제한이 트리거되지 않게 합니다.

멀웨어 검사 서비스의 서비스 계정 설정

이 섹션에서는 멀웨어 검사 서비스에 사용할 서비스 계정을 만듭니다. 그런 다음 Cloud Storage 버킷에 읽고 쓸 수 있는 권한을 갖도록 서비스 계정에 적절한 역할을 부여합니다. 이러한 역할은 계정에 최소한의 권한과 필요한 리소스에 대한 액세스 권한만 부여하도록 합니다.

  1. malware-scanner 서비스 계정을 만듭니다.

    gcloud iam service-accounts create ${SERVICE_NAME}
    
  2. 버킷에 객체 관리자 역할을 부여합니다. 이 역할은 서비스가 검사되지 않은 버킷에서 파일을 읽고 삭제할 수 있으며 격리 및 정상 버킷에 파일을 쓸 수 있습니다.

    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://unscanned-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://clean-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://quarantined-${PROJECT_ID}"
    gsutil iam ch \
        "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \
        "gs://cvd-mirror-${PROJECT_ID}"
    
  3. 서비스가 Monitoring에 측정항목을 쓸 수 있도록 측정항목 작성자 역할을 부여합니다.

    gcloud projects add-iam-policy-binding \
          "${PROJECT_ID}" \
          --member="serviceAccount:${SERVICE_ACCOUNT}" \
          --role=roles/monitoring.metricWriter
    

Cloud Run에서 멀웨어 검사 서비스 만들기

이 섹션에서는 멀웨어 검사 서비스를 Cloud Run에 배포합니다. 이 서비스는 다음을 포함하는 Docker 컨테이너에서 실행됩니다.

  • 서비스, Node.js 런타임, Google Cloud SDK, ClamAV 바이너리로 컨테이너 이미지를 빌드하는 Dockerfile
  • 멀웨어 검사 Cloud Run 서비스의 Node.js 파일
  • Cloud Storage 버킷 이름을 지정하는 config.json 구성 파일
  • Cloud Storage에서 ClamAV 멀웨어 정의 데이터베이스 미러를 새로 고치는 updateCvdMirror.sh 셸 스크립트
  • Cloud Storage API에 대한 인증된 액세스를 제공하는 freshclam HTTP 요청을 프록시하기 위한 cloud-run-proxy 서비스
  • 인스턴스 시작 시 필요한 서비스를 실행하기 위한 bootstrap.sh 셸 스크립트

서비스를 배포하려면 다음 안내를 따르세요.

  1. Cloud Shell에서 코드 파일이 포함된 샘플 GitHub 저장소를 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
    
  2. cloudrun-malware-scanner 디렉터리로 변경합니다.

    cd docker-clamav-malware-scanner/cloudrun-malware-scanner
    
  3. config.json 구성 파일을 수정하여 만든 Cloud Storage 버킷을 지정합니다. 버킷 이름은 프로젝트 ID를 기반으로 하므로 검색 및 바꾸기 작업을 사용할 수 있습니다.

    sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json
    

    업데이트된 구성 파일을 볼 수 있습니다.

    cat config.json
    
  4. Cloud Storage에서 ClamAV 멀웨어 데이터베이스 미러의 초기 채우기를 수행합니다.

    python3 -m venv pyenv
    . pyenv/bin/activate
    pip3 install crcmod cvdupdate
    ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}"
    deactivate
    

    이 명령어는 CVDUpdate 도구의 로컬 설치를 수행하고 이를 사용하여 멀웨어 데이터베이스를 다운로드합니다. 그런 다음 이 명령어는 이전에 만든 cvd-mirror-PROJECT_ID 버킷에 데이터베이스를 업로드합니다.

    미러 버킷의 콘텐츠를 확인할 수 있습니다.

    gsutil ls "gs://cvd-mirror-${PROJECT_ID}/cvds"
    

    버킷에는 전체 멀웨어 데이터베이스가 포함된 여러 CVD 파일, 일일 차등 업데이트가 포함된 여러 .cdiff 파일, 구성 및 상태 정보가 있는 .json 파일 2개가 포함되어야 합니다.

  5. 앞에서 만든 서비스 계정을 사용하여 Cloud Run 서비스를 만들고 배포하세요.

    gcloud beta run deploy "${SERVICE_NAME}" \
      --source . \
      --region "${REGION}" \
      --no-allow-unauthenticated \
      --memory 4Gi \
      --cpu 1 \
      --concurrency 20 \
      --min-instances 1 \
      --max-instances 5 \
      --no-cpu-throttling \
      --cpu-boost \
      --service-account="${SERVICE_ACCOUNT}"
    

    이 명령어는 vCPU 1개가 있고 4GiB RAM을 사용하는 Cloud Run 인스턴스를 만듭니다. 이 배포에는 이 크기가 허용됩니다. 그러나 프로덕션 환경에서는 인스턴스에 더 큰 CPU 및 메모리 크기와 더 큰 --max-instances 매개변수를 선택할 수 있습니다. 필요한 리소스 크기는 서비스가 처리해야 하는 트래픽 양에 따라 다릅니다.

    이 명령어에는 다음 사양이 포함됩니다.

    • --concurrency 매개변수는 각 인스턴스가 처리할 수 있는 동시 요청 수를 지정합니다.
    • --no-cpu-throttling 매개변수를 사용하면 인스턴스가 멀웨어 정의 업데이트와 같은 백그라운드에서 작업을 수행할 수 있습니다.
    • --cpu-boost 매개변수는 시작 지연 시간을 줄이기 위해 인스턴스 시작 시 vCPU 수를 두 배로 늘립니다.
    • 각 인스턴스의 시작 시간이 상대적으로 길기 때문에 --min-instances 1 매개변수는 인스턴스를 최소 한 개 이상 활성 상태로 유지합니다.
    • --max-instances 5 매개변수는 서비스가 너무 커지지 않도록 방지합니다.
  6. 메시지가 표시되면 Y를 입력하여 서비스를 빌드하고 배포하세요. 빌드 및 배포에는 약 10분이 소요됩니다. 완료되면 다음 메시지가 표시됩니다.

    Service [malware-scanner] revision [malware-scanner-UNIQUE_ID] has been deployed and is serving 100 percent of traffic.
    Service URL: https://malware-scanner-UNIQUE_ID.a.run.app
    
  7. 배포 명령어 출력의 Service URL 값을 셸 변수에 저장합니다. 이 값은 나중에 Cloud Scheduler 작업을 만들 때 사용합니다.

    SERVICE_URL="SERVICE_URL"
    

실행 중인 서비스와 ClamAV 버전을 확인하려면 다음 명령어를 실행하세요.

curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)"  \
     ${SERVICE_URL}

Cloud Run 서비스를 사용하려면 모든 호출을 인증해야 하며 인증 ID에는 서비스에 대한 run.routes.invoke 권한이 있어야 합니다. 다음 섹션에서 권한을 추가합니다.

Eventarc Cloud Storage 트리거 만들기

이 섹션에서는 Eventarc에서 Cloud Storage 이벤트를 캡처할 수 있는 권한을 추가하고 이러한 이벤트를 Cloud Run malware-scanner 서비스로 전송하는 트리거를 생성합니다.

  1. 2021년 4월 8일 이전에 만든 기존 프로젝트를 사용하는 경우 iam.serviceAccountTokenCreator 역할을 Pub/Sub 서비스 계정에 추가합니다.

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\
        --role='roles/iam.serviceAccountTokenCreator'
    

    이러한 역할 추가는 이전 프로젝트에만 필요하며 이를 통해 Pub/Sub에서 Cloud Run 서비스를 호출할 수 있습니다.

  2. Cloud Shell에서 Cloud Storage 서비스 계정에 Pub/Sub 게시자 역할을 부여합니다.

    STORAGE_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p "${PROJECT_ID}")
    
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
      --member "serviceAccount:${STORAGE_SERVICE_ACCOUNT}" \
      --role "roles/pubsub.publisher"
    
  3. malware-scanner 서비스 계정이 Cloud Run 서비스를 호출하고 Eventarc 이벤트 수신자 역할을 하도록 허용합니다.

    gcloud run services add-iam-policy-binding "${SERVICE_NAME}" \
      --region="${REGION}" \
      --member "serviceAccount:${SERVICE_ACCOUNT}" \
      --role roles/run.invoker
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
      --member "serviceAccount:${SERVICE_ACCOUNT}" \
      --role "roles/eventarc.eventReceiver"
    
  4. 검사되지 않은 Cloud Storage 버킷에서 최종 객체 이벤트를 캡처하고 Cloud Run 서비스로 전송하는 Eventarc 트리거를 만듭니다. 트리거는 인증에 malware-scanner 서비스 계정을 사용합니다.

    BUCKET_NAME="unscanned-${PROJECT_ID}"
    gcloud eventarc triggers create "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \
      --destination-run-service="${SERVICE_NAME}" \
      --destination-run-region="${REGION}" \
      --location="${LOCATION}" \
      --event-filters="type=google.cloud.storage.object.v1.finalized" \
      --event-filters="bucket=${BUCKET_NAME}" \
      --service-account="${SERVICE_ACCOUNT}"
    

    다음 오류 중 하나가 수신될 경우 1분 정도 기다린 후 명령어를 다시 실행합니다.

    ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was invalid: Bucket "unscanned-PROJECT_ID" was not found. Please verify that the bucket exists.
    
    ERROR: (gcloud.eventarc.triggers.create) FAILED_PRECONDITION: Invalid resource state for "": Permission denied while using the Eventarc Service Agent. If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. Otherwise, verify that it has Eventarc Service Agent role.
    
  5. Eventarc 트리거에 사용되는 기본 Pub/Sub 구독에서 메시지 확인 기한을 2분으로 변경하세요. 큰 파일 또는 높은 부하의 경우 기본값인 10초는 너무 짧습니다.

    SUBSCRIPTION_NAME=$(gcloud eventarc triggers describe \
        "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \
        --location="${LOCATION}" \
        --format="get(transport.pubsub.subscription)")
    gcloud pubsub subscriptions update "${SUBSCRIPTION_NAME}" --ack-deadline=120
    

    트리거는 즉시 생성되지만 트리거에서 이벤트를 전파하고 필터링하는 데 최대 10분이 걸릴 수 있습니다.

ClamAV 데이터베이스 미러링 업데이트를 트리거하는 Cloud Scheduler 작업 만들기

  • 멀웨어 정의 데이터베이스의 미러를 업데이트하는 명령어를 사용하여 Cloud Run 서비스에서 HTTP POST 요청을 실행하는 Cloud Scheduler 작업을 만듭니다. 동일한 슬롯을 너무 많은 클라이언트가 사용하지 않도록 ClamAV에서는 10의 배수를 피하여 3분에서 57분 사이의 임의 시간으로 작업을 예약하세요.

    while : ; do
      # set MINUTE to a random number between 3 and 57
      MINUTE="$((RANDOM%55 + 3))"
      # exit loop if MINUTE isn't a multiple of 10
      [[ $((MINUTE % 10)) != 0 ]] && break
    done
    
    gcloud scheduler jobs create http \
        "${SERVICE_NAME}-mirror-update" \
        --location="${REGION}" \
        --schedule="${MINUTE} */2 * * *" \
        --oidc-service-account-email="${SERVICE_ACCOUNT}" \
        --uri="${SERVICE_URL}" \
        --http-method=post \
        --message-body='{"kind":"schedule#cvd_update"}' \
        --headers="Content-Type=application/json"
    

    --schedule 명령줄 인수는 unix-cron 문자열 형식을 사용하여 작업이 실행되는 시점을 정의합니다. 지정된 값은 작업이 2시간마다 무작위로 생성된 특정 시간에서 실행되어야 함을 나타냅니다.

이 작업은 Cloud Storage의 ClamAV 미러만 업데이트합니다. Cloud Run의 각 인스턴스에 있는 ClamAV refreshclam 데몬은 새로운 정의에 대한 미러를 30분마다 확인하고 ClamAV 데몬을 업데이트합니다.

파일을 업로드하여 파이프라인 테스트

파이프라인을 테스트하려면 멀웨어가 없는 정상 파일 1개와 감염된 파일을 모방한 테스트 파일 1개를 업로드합니다.

  1. 샘플 텍스트 파일을 만들거나 기존의 클린 파일을 사용하여 파이프라인 프로세스를 테스트하세요.

  2. Cloud Shell에서 샘플 데이터 파일을 스캔되지 않은 버킷에 복사합니다.

    gsutil cp FILENAME "gs://unscanned-${PROJECT_ID}"
    

    FILENAME을 클린 텍스트 파일의 이름으로 바꿉니다. 멀웨어 검사 서비스는 각 파일을 검사한 후 적절한 버킷으로 옮깁니다. 이 파일은 클린 버킷으로 이동합니다.

  3. 파이프라인에서 이 파일을 처리할 때까지 몇 초 정도 기다린 다음 클린 버킷에서 처리된 파일이 있는지 확인하세요.

    gsutil ls -r "gs://clean-${PROJECT_ID}"
    

    검사되지 않은 버킷에서 파일이 삭제되었는지 확인할 수 있습니다.

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    
  4. EICAR 표준 멀웨어 방지 테스트 서명이 포함된 eicar-infected.txt 파일을 검사되지 않은 버킷에 업로드합니다.

    echo -e 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' \
        | gsutil cp - "gs://unscanned-${PROJECT_ID}/eicar-infected.txt"
    

    이 텍스트 문자열에는 테스트 목적으로 멀웨어 검사를 트리거하는 서명이 있습니다. 이 테스트 파일은 널리 사용되는 테스트로, 실제 멀웨어가 아니고 워크스테이션에 무해합니다. 멀웨어 스캐너가 설치된 컴퓨터에서 이 문자열이 포함된 파일을 만들려고 하면 알림을 트리거할 수 있습니다.

  5. 몇 초 정도 기다린 다음 격리된 버킷에서 파일이 파이프라인에 따라 처리되었는지 확인하세요.

    gsutil ls -r "gs://quarantined-${PROJECT_ID}"
    

    또한 서비스는 멀웨어에 감염된 파일이 감지되면 Logging에 로그 항목을 로깅합니다.

    검사되지 않은 버킷에서 파일이 삭제되었는지 확인할 수 있습니다.

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    

멀웨어 정의 데이터베이스 업데이트 메커니즘 테스트

  • Cloud Shell에서 Cloud Scheduler 작업을 강제로 실행하여 업데이트 확인을 트리거합니다.

    gcloud scheduler jobs run "${SERVICE_NAME}-mirror-update" --location="${REGION}"
    

    이 명령어 결과는 상세 로그에만 표시됩니다.

서비스 모니터링

Cloud Logging 및 Cloud Monitoring을 사용하여 서비스를 모니터링할 수 있습니다.

자세한 로그 보기

  1. Google Cloud 콘솔에서 Cloud Logging 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 로그 필드 필터가 표시되지 않으면 로그 필드를 클릭합니다.

  3. 로그 필드 필터에서 Cloud Run 버전을 클릭합니다.

  4. 로그 필드 필터의 서비스 이름 섹션에서 malware-scanner를 클릭합니다.

로그 쿼리 결과에는 업로드한 두 파일의 검사 요청 및 상태를 보여주는 여러 줄을 포함한 서비스의 로그가 표시됩니다.

Scan request for gs://unscanned-PROJECT_ID/FILENAME, (##### bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING
Scan status for gs://unscanned-PROJECT_ID/FILENAME: CLEAN (##### bytes in #### ms)
...
Scan request for gs://unscanned-PROJECT_ID/eicar-infected.txt, (69 bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING
Scan status for gs://unscanned-PROJECT_ID/eicar-infected.txt: INFECTED stream: Eicar-Signature FOUND (69 bytes in ### ms)

출력에는 감염된 테스트 파일의 멀웨어 이름과 함께 ClamAV 버전 및 멀웨어 데이터베이스 서명 버전이 표시됩니다. 이러한 로그 메시지를 사용하여 맬웨어가 발견될 때 또는 검사 중에 오류가 발생할 때 알림을 설정할 수 있습니다.

출력에는 멀웨어 정의 미러 업데이트 로그도 표시됩니다.

Starting CVD Mirror update
CVD Mirror update check complete. output: ...

미러가 업데이트되면 출력에 추가 줄이 표시됩니다.

CVD Mirror updated: DATE_TIME - INFO: Downloaded daily.cvd. Version: VERSION_INFO

Freshclam 업데이트 로그는 30분마다 표시됩니다.

DATE_TIME -> Received signal: wake up
DATE_TIME -> ClamAV update process started at DATE_TIME
DATE_TIME -> daily.cvd database is up-to-date (version: VERSION_INFO)
DATE_TIME -> main.cvd database is up-to-date (version: VERSION_INFO)
DATE_TIME -> bytecode.cvd database is up-to-date (version: VERSION_INFO)

데이터베이스가 업데이트된 경우 Freshclam 로그 줄은 대신 다음과 비슷합니다.

DATE_TIME -> daily.cld updated (version: VERSION_INFO)

측정항목 보기

이 서비스는 모니터링 및 알림 목적으로 다음 측정항목을 생성합니다.

  • 처리된 정상 파일 수:
    custom.googleapis.com/opencensus/malware-scanning/clean_files
  • 처리된 감염 파일 수:
    custom.googleapis.com/opencensus/malware-scanning/infected_files
  • 파일을 검사하는 데 걸린 시간:
    custom.googleapis.com/opencensus/malware-scanning/scan_duration
  • 총 검사 바이트 수:
    custom.googleapis.com/opencensus/malware-scanning/bytes_scanned
  • 실패한 멀웨어 검사 수:
    custom.googleapis.com/opencensus/malware-scanning/scans_failed
  • CVD 미러 업데이트 확인 수:
    custom.googleapis.com/opencensus/malware-scanning/cvd-mirror-updates

Cloud Monitoring 측정항목 탐색기에서 이러한 측정항목을 볼 수 있습니다.

  1. Google Cloud 콘솔에서 Cloud Monitoring 측정항목 탐색기 페이지로 이동합니다.

    측정항목 탐색기로 이동

  2. 측정항목 선택 필드를 클릭하고 필터 문자열 malware를 입력하세요.

  3. OpenCensus/malware-scanning/clean_files 측정항목을 선택합니다. 그래프에 정상 파일이 검사된 시점을 나타내는 데이터 포인트가 표시됩니다.

측정항목을 사용하여 파이프라인을 모니터링하고 멀웨어가 감지되거나 파일 처리에 실패한 경우에 대한 알림을 만들 수 있습니다.

생성된 측정항목에는 다음과 같은 라벨이 있어서, 필터링 및 집계에 사용하여 측정항목 탐색기로 더 세분화된 세부정보를 볼 수 있습니다.

  • source_bucket
  • destination_bucket
  • clam_version
  • cloud_run_revision

여러 버킷 처리

멀웨어 검사 서비스는 여러 소스 버킷의 파일을 검사하여 정상 및 격리 버킷으로 분리할 수 있습니다. 이 고급 구성은 이 배포의 범위를 벗어나지만 필수 단계를 요약하면 다음과 같습니다.

  1. 고유 이름을 가진 검사되지 않고 정상이거나 격리된 Cloud Storage 버킷을 만듭니다.

  2. 각 버킷의 malware-scanner 서비스 계정에 적절한 역할을 부여합니다.

  3. config.json 구성 파일을 수정하여 각 구성의 버킷 이름을 지정하세요.

    {
      "buckets": [
        {
          "unscanned": "unscanned-bucket-1-name",
          "clean": "clean-bucket-1-name",
          "quarantined": "quarantined-bucket-1-name"
        },
        {
          "unscanned": "unscanned-bucket-2-name",
          "clean": "clean-bucket-2-name",
          "quarantined": "quarantined-bucket-2-name"
        }
      ]
      "ClamCvdMirrorBucket": "cvd-mirror-bucket-name"
    }
    
  4. 검사되지 않은 각 버킷에 대해 Eventarc 트리거를 만듭니다. 버킷마다 고유한 트리거 이름을 만들어야 합니다.

    Cloud Storage 버킷은 Eventarc 트리거와 동일한 프로젝트 및 리전에 있어야 합니다.

삭제

다음 섹션에서는 이 배포에서 사용한 Google Cloud 프로젝트의 향후 요금이 부과되지 않도록 하는 방법을 설명합니다.

Google Cloud 프로젝트 삭제

이 배포에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 Google Cloud 프로젝트를 삭제하면 됩니다.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계