Cloud Storage에서 Cloud 감사 로그 사용

이 페이지에서는 Cloud Storage에서 Cloud 감사 로그를 사용하는 방법을 보충 설명합니다. Cloud 감사 로그를 사용하면 Cloud Storage에서 수행된 API 작업의 로그를 생성할 수 있습니다.

개요

Google Cloud 서비스는 Google Cloud 리소스 내에서 감사 로그를 작성하여 '누가, 언제, 어디서, 무엇을 했는지'라는 질문에 답하는 데 도움을 줍니다. 또한 리소스에 액세스하는 방법에 대해 더 세부적인 정보를 얻기 위해 커스텀 정보를 감사 로그에 연결할 수 있습니다.

Google Cloud 프로젝트에는 Google Cloud 프로젝트 내에 있는 리소스의 감사 로그만 있습니다. 폴더, 조직, 결제 계정과 같은 다른 Google Cloud 리소스에는 항목 자체의 감사 로그가 있습니다.

Cloud 감사 로그의 일반적인 개요는 Cloud 감사 로그 개요를 참조하세요. 감사 로그 형식에 대한 자세한 내용은 감사 로그 이해를 참조하세요.

사용 가능한 감사 로그

Cloud Storage에는 다음과 같은 유형의 감사 로그를 사용할 수 있습니다.

  • 관리자 활동 감사 로그: Cloud Storage 리소스 액세스를 수정하는 작업의 항목과 버킷, 관리형 폴더, 인벤토리 보고서 구성을 생성, 삭제, 수정하는 작업의 항목을 로깅합니다. 관리자 활동 감사 로그는 사용 중지할 수 없습니다.

  • 데이터 액세스 감사 로그: 관리자 활동 감사 로그에서 추적되지 않는 작업의 항목을 로깅합니다. 데이터 액세스 감사 로그에는 다음과 같은 여러 가지 하위 유형이 있습니다.

    • ADMIN_READ: 액세스 구성 읽기, 버킷 메타데이터 읽기, 프로젝트 내 버킷 나열 작업의 항목입니다.

    • DATA_READ: 버킷 이외의 Cloud Storage 리소스 읽기 또는 나열 작업의 항목입니다.

    • DATA_WRITE: 객체를 만들거나, 수정하거나, 삭제하거나, 복원하거나, XML API 멀티파트 업로드를 만들거나, 수정하거나, 삭제하는 작업의 항목입니다.

    데이터 액세스 감사 로그를 받으려면 이를 명시적으로 사용 설정해야 합니다.

Cloud Storage에 대한 감사 로그 외에도 Cloud 감사 로그가 Storage Insights에 대한 감사 로그를 만들 수 있습니다. Storage Insights 감사 로그는 인벤토리 보고서 구성에 대해 생성, 업데이트, 가져오기를 수행할 때마다 그리고 인벤토리 보고서를 가져올 때 생성됩니다.

감사 로그 유형에 대한 자세한 내용은 감사 로그 유형을 참조하세요.

감사 대상 작업

다음 표에는 각 감사 로그 유형에 해당하는 Cloud Storage 작업이 요약되어 있습니다.

감사 로그 유형 하위 유형 Cloud Storage 작업
관리자 활동 ADMIN_WRITE
  • IAM 정책 설정/변경
  • 객체 ACL1 변경
  • 버킷 만들기
  • 버킷 삭제
  • 버킷 메타데이터 업데이트
  • 관리형 폴더 만들기
  • 관리형 폴더 삭제
  • 인벤토리 보고서 구성 만들기
  • 인벤토리 보고서 구성 업데이트
  • 인벤토리 보고서 구성 삭제
데이터 액세스 ADMIN_READ
  • IAM 정책 가져오기
  • 객체 ACL 가져오기
  • 버킷 메타데이터 가져오기
  • 버킷 나열
데이터 액세스 DATA_READ
  • 객체 데이터 가져오기
  • 객체 메타데이터 가져오기
  • 객체 나열
  • 관리형 폴더 메타데이터 가져오기
  • 관리형 폴더 나열
  • 객체 복사2
  • 객체 작성2
  • 진행 중인 XML API 멀티파트 업로드 나열
  • XML API 멀티파트 업로드 부분 나열
  • 인벤토리 보고서 구성 가져오기
  • 인벤토리 보고서 구성 나열
  • 인벤토리 보고서 얻기
  • 인벤토리 보고서 나열
데이터 액세스 DATA_WRITE
  • 객체 만들기
  • 객체 삭제
  • 소프트 삭제된 객체 복원
  • 비 ACL 객체 메타데이터 업데이트
  • 객체 복사1
  • 객체 작성1
  • XML API 멀티파트 업로드 시작
  • XML API 멀티파트 업로드에서 부분 만들기
  • XML API 멀티파트 업로드 취소
  • XML API 멀티파트 업로드 완료

1 ACL이 객체 생성 시 초기에 설정된 경우 관리자 활동 감사 로그가 생성되지 않습니다. 또한 객체 ACL을 공개로 설정하면 해당 객체 또는 ACL에 대한 읽기 또는 쓰기에 감사 로그가 생성되지 않습니다.

2 이 작업에는 데이터 읽기 및 쓰기가 모두 포함됩니다. 따라서 이러한 작업은 각각 로그 항목 두 개를 생성합니다.

제한사항

Cloud Storage에서 Cloud 감사 로그를 사용하면 다음과 같은 제한 사항이 적용됩니다.

이러한 경우 로깅 기능이 필요한 경우 Cloud Storage 사용량 로그를 사용하는 것이 좋습니다.

감사 로그 형식

감사 로그 항목에는 다음과 같은 구성요소가 포함됩니다.

  • LogEntry 객체인 로그 항목 자체. 유용한 필드는 다음과 같습니다.

    • logName에는 리소스 ID와 감사 로그 유형이 있습니다.
    • resource에는 감사 작업 대상이 있습니다.
    • timestamp에는 감사 작업 시간이 있습니다.
    • protoPayload에는 감사 정보가 있습니다.
  • 로그 항목의 protoPayload 필드에 AuditLog 객체로 보관되는 감사 로깅 데이터입니다.

  • 세부 요청 및 응답 정보를 포함한 Cloud Storage 관련 감사 정보(선택사항)입니다. 자세한 내용은 상세한 감사 로깅 모드를 참조하세요. 커스텀 정보를 감사 로그에 연결하기 위해 자세한 감사 로깅을 적용할 필요는 없습니다.

이러한 객체의 다른 필드와 필드 해석 방법은 감사 로그 이해를 참조하세요.

로그 이름

Cloud 감사 로그의 로그 이름에는 감사 로그를 소유한 Google 클라우드 프로젝트나 기타 Google Cloud 항목을 나타내는 리소스 식별자와 로그에 관리자 활동 또는 데이터 액세스 분석 로깅 데이터가 포함되어 있는지 여부가 포함됩니다.

다음은 리소스 식별자 변수를 포함한 감사 로그 이름입니다.

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access

   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

서비스 이름

Cloud Storage 감사 로그는 서비스 이름 storage.googleapis.com을 사용합니다.

Storage Insights 감사 로그는 서비스 이름 storageinsights.googleapis.com을 사용합니다.

모든 Cloud Logging API 서비스 이름과 해당 모니터링 리소스 유형의 목록은 리소스에 서비스 매핑을 참조하세요.

리소스 유형

Cloud Storage 감사 로그는 리소스 유형 gcs_bucket을 사용합니다.

모든 Cloud Logging 모니터링 리소스 유형과 설명 정보의 목록은 모니터링 리소스 유형을 참조하세요.

감사 로깅 사용 설정

관리자 활동 감사 로그는 항상 사용 설정되며 중지될 수 없습니다.

데이터 액세스 감사 로그는 기본적으로 중지되어 있으며 명시적으로 사용 설정되어야만 작성됩니다.

데이터 액세스 감사 로그의 일부 또는 전부를 사용 설정하는 방법은 데이터 액세스 감사 로그 구성을 참조하세요.

권한 및 역할

IAM 권한과 역할에 따라 Google Cloud 리소스의 감사 로그 데이터에 액세스할 수 있는지 여부가 결정됩니다.

사용 사례에 적용할 Logging 관련 권한 및 역할을 결정할 때는 다음 사항을 고려하세요.

  • 로그 뷰어 역할(roles/logging.viewer)은 관리자 활동, 정책 거부, 시스템 이벤트 감사 로그에 대한 읽기 전용 액세스 권한을 부여합니다. 이 역할만 있으면 _Required 버킷과 _Default 버킷에 있는 데이터 액세스 감사 로그를 볼 수 없습니다.

  • 비공개 로그 뷰어 역할(roles/logging.privateLogViewer)에는 roles/logging.viewer에 포함된 권한과 _Required_Default 버킷의 데이터 액세스 감사 로그에 대한 읽기 권한도 포함되어 있습니다.

    비공개 로그가 사용자 정의된 버킷에 저장된 경우 이러한 버킷에서 로그 읽기 권한이 있는 모든 사용자가 비공개 로그를 읽을 수 있습니다. 로그 버킷에 대한 상세 설명은 라우팅 및 스토리지 개요를 참조하세요.

감사 로그 데이터에 적용되는 IAM 권한과 역할에 대한 자세한 내용은 IAM으로 액세스 제어를 참조하세요.

로그 보기

모든 감사 로그를 쿼리하거나 감사 로그 이름별로 로그를 쿼리할 수 있습니다. 감사 로그 이름에는 감사 로깅 정보를 보려는 Google Cloud 프로젝트, 폴더, 결제 계정 또는 조직의 리소스 식별자가 포함됩니다. 쿼리에서 색인이 생성된 LogEntry 필드를 지정할 수 있으며 SQL 쿼리를 지원하는 로그 애널리틱스 페이지를 사용하는 경우 쿼리 결과를 차트로 볼 수 있습니다.

로그 쿼리에 대한 자세한 내용은 다음 페이지를 참조하세요.

Google Cloud 콘솔, Google Cloud CLI 또는 Logging API를 사용하여 Cloud Logging에서 감사 로그를 볼 수 있습니다.

콘솔

Google Cloud 콘솔에서 로그 탐색기를 사용하여 Google Cloud 프로젝트, 폴더 또는 조직의 감사 로그 항목을 검색할 수 있습니다.

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

    로그 탐색기로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Logging인 결과를 선택합니다.

  2. 기존 Google Cloud 프로젝트, 폴더 또는 조직을 선택합니다.

  3. 모든 감사 로그를 표시하려면 쿼리 편집기 필드에 다음 쿼리 중 하나를 입력한 후 쿼리 실행을 클릭합니다.

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 특정 리소스 및 감사 로그 유형에 대한 감사 로그를 표시하려면 쿼리 빌더 창에서 다음을 수행합니다.

    • 리소스 유형에서 감사 로그를 확인할 Google Cloud 리소스를 선택하세요.

    • 로그 이름에서 확인할 감사 로그 유형을 선택합니다.

      • 관리자 활동 감사 로그의 경우 activity를 선택합니다.
      • 데이터 액세스 감사 로그의 경우 data_access를 선택합니다.
      • 시스템 이벤트 감사 로그의 경우 system_event를 선택합니다.
      • 정책 거부 감사 로그의 경우 policy를 선택합니다.
    • 쿼리 실행을 클릭합니다.

    이러한 옵션 중 어느 것도 표시되지 않으면 Google Cloud 프로젝트나 폴더, 조직에 해당 유형의 감사 로그가 없다는 의미입니다.

    로그 탐색기에서 로그를 확인하려고 할 때 문제가 발생하는 경우 문제 해결 정보를 참조하세요.

    로그 탐색기를 사용한 쿼리에 대한 상세 설명은 로그 탐색기에서 쿼리 빌드를 참조하세요. Gemini를 사용하여 로그 탐색기에서 로그 항목을 요약하는 방법은 Gemini 지원을 받아 로그 항목 요약을 참조하세요.

gcloud

Google Cloud CLI는 Logging API에 명령줄 인터페이스를 제공합니다. 각 로그 이름에 유효한 리소스 식별자를 제공합니다. 예를 들어 쿼리에 PROJECT_ID가 포함된 경우 제공한 프로젝트 식별자가 현재 선택된 Google Cloud 프로젝트를 참조해야 합니다.

Google Cloud 프로젝트 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \
    --project=PROJECT_ID

폴더 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \
    --folder=FOLDER_ID

조직 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \
    --organization=ORGANIZATION_ID

Cloud Billing 계정 수준의 감사 로그 항목을 읽으려면 다음 명령어를 실행합니다.

gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \
    --billing-account=BILLING_ACCOUNT_ID

1일 이상 된 로그를 읽으려면 명령어에 --freshness 플래그를 추가합니다.

gcloud CLI 사용에 대한 상세 설명은 gcloud logging read를 참조하세요.

API

쿼리를 빌드할 때 각 로그 이름에 유효한 리소스 식별자를 제공합니다. 예를 들어 쿼리에 PROJECT_ID가 포함된 경우 제공한 프로젝트 식별자가 현재 선택된 Google Cloud 프로젝트를 참조해야 합니다.

예를 들어 Logging API를 사용하여 프로젝트 수준의 감사 로그 항목을 보려면 다음을 수행합니다.

  1. entries.list 메서드 문서의 API 사용해 보기 섹션으로 이동합니다.

  2. API 사용해 보기 양식의 요청 본문 부분에 다음을 입력합니다. 이 자동 입력된 양식을 클릭하면 요청 본문이 자동으로 입력되지만 각 로그 이름에 유효한 PROJECT_ID를 입력해야 합니다.

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 실행을 클릭합니다.

감사 로그에 커스텀 정보 추가

요청에 x-goog-custom-audit-KEY: VALUE 헤더를 포함하여 커스텀 정보를 요청에 대한 감사 로그에 연결할 수 있습니다. XML API 요청은 추가로 x-goog-custom-audit-KEY=VALUE 쿼리 매개변수 사용을 지원합니다. 커스텀 정보는 감사 로그 항목에 있는 protoPayloadmetadata 필드에 추가됩니다.

커스텀 감사 정보를 추가할 때는 다음 고려사항에 유의하세요.

  • KEY는 최대 64자(영문 기준)를 포함할 수 있으며, 각 VALUE는 최대 1,200자(영문 기준)를 포함할 수 있습니다.

  • 각 요청에는 도합 최대 4개의 헤더 또는 매개변수 항목을 포함할 수 있습니다.

헤더 항목 예시

다음 목록에서는 헤더 항목에 포함할 수 있는 키-값 쌍의 예시를 보여줍니다.

  • x-goog-custom-audit-job: test-job-id-here
  • x-goog-custom-audit-user: user ID test 1
  • x-goog-custom-audit-internal-user-id: MATR2022-11
  • x-goog-custom-audit-tracking-ticket: TT/1516512851
  • x-goog-custom-audit-justification: Removed customer identity record at customer request
  • x-goog-custom-audit-customer-id: USCU12315154

요청 예

명령줄

gcloud storage hash gs://example_bucket/example_object.jpeg --additional-headers=x-goog-custom-audit-job="job name",x-goog-custom-audit-user="test user"

클라이언트 라이브러리

C++

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

C#

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

Go

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

자바

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

Node.js

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

PHP

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

Python

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

Ruby

커스텀 헤더를 요청에 추가하는 방법은 커스텀 헤더 추가를 참조하세요.

REST API

JSON API

curl -X GET "https://storage.googleapis.com/storage/v1/b/example_bucket/o/example_object" \
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \
-H "x-goog-custom-audit-job: job name" \
-H "x-goog-custom-audit-user: test user"

XML API

curl -X GET "https://storage.googleapis.com/example_bucket/example_object" \
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \
-H "x-goog-custom-audit-job: job name" \
-H "x-goog-custom-audit-user: test user"

서명된 URL 요청

curl -X GET 'storage.googleapis.com/example_bucket?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T181309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host,x-goog-custom-audit-job,x-goog-custom-audit-user&X-Goog-Signature=247a2aa45f169edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa8496def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dcc1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c20580e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b133447032ea7abedc098d2eb14a7' \
-H "x-goog-custom-audit-job: job name" \
-H "x-goog-custom-audit-user: test user"

커스텀 감사 헤더도 X-Goog-SignedHeaders에 포함되어야 합니다.

커스텀 감사 헤더를 추가할 수 있는 서명된 URL 요청을 만들려면 서명된 URL을 생성할 때 요청에 사용할 커스텀 감사 헤더도 포함해야 합니다. 예를 들면 다음과 같습니다.

gcloud storage sign-url gs://example_bucket/example_object.jpeg --private-key-file=example-key.json --duration=10m --headers=x-goog-custom-audit-job:"job name",x-goog-custom-audit-user="test user"

또한 커스텀 헤더를 설정할 때 클라이언트 라이브러리를 사용하여 서명된 URL을 생성할 수 있습니다.

서명된 헤더를 사용하는 대신 쿼리 매개변수를 사용하여 커스텀 감사 항목을 전달할 수 있습니다.

curl -X GET 'storage.googleapis.com/example_bucket?X-Goog-Custom-Audit-Key=Value&X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount.com%2F20181026%2Fus-central1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T181309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f169edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa8496def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dcc1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c20580e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b133447032ea7abedc098d2eb14a7'

서명된 URL을 생성할 때 이러한 쿼리 매개변수를 포함해야 합니다. 예를 들면 다음과 같습니다.

gcloud storage sign-url gs://example_bucket/example_object.jpeg --private-key-file=example-key.json --duration=10m --query-params=x-goog-custom-audit-job=job_name,x-goog-custom-audit-user=test_user

로그 항목 예시

protoPayload: {
  @type: "type.googleapis.com/google.cloud.audit.Auditlog",
  ...
  metadata: {
    audit_context: {
      app_context: "EXTERNAL",
      audit_info: {
        x-goog-custom-audit-job: "job name",
        x-goog-custom-audit-user: "test user"
      }
    }
  }
}

type.googleapis.com/google.cloud.audit.Auditlog 유형의 protoPayload 객체에 포함된 필드에 대한 자세한 내용은 AuditLog 참고 문서를 참조하세요.

감사 로그 라우팅

다른 종류의 로그를 라우팅할 때와 같은 방식으로 지원되는 대상에 감사 로그를 라우팅할 수 있습니다. 다음과 같은 이유로 감사 로그를 라우팅해야 할 수 있습니다.

  • 장기간 감사 로그를 보관하거나 더욱 강력한 검색 기능을 사용하려면 감사 로그의 복사본을 Cloud Storage, BigQuery 또는 Pub/Sub로 라우팅하면 됩니다. Pub/Sub을 사용하면 다른 애플리케이션, 다른 저장소, 서드 파티로 라우팅할 수 있습니다.
  • 조직 전체의 감사 로그를 관리하려면 조직의 Google Cloud 프로젝트 일부 또는 전체에서 로그를 라우팅할 수 있는 집계 싱크를 만들면 됩니다.
  • 사용 설정한 데이터 액세스 감사 로그로 인해 Google Cloud 프로젝트에서 무료 할당량을 초과하는 경우 Logging에서 데이터 액세스 감사 로그를 제외하는 싱크를 만들 수 있습니다.

로그 라우팅에 대한 안내는 싱크 구성 및 관리를 참조하세요.

가격 책정

Cloud Logging 가격 책정에 대한 자세한 내용은 Google Cloud Observability 가격 책정: Cloud Logging을 참조하세요.

다음 단계

  • [Cloud Logging 내보내기 시나리오][22] 튜토리얼 살펴보기