Spanner Omni 감사 로깅

Spanner Omni는 Spanner Omni 배포 내의 관리 활동과 데이터 액세스를 기록하는 감사 로그를 작성합니다.

감사 로그는 '누가 언제 어디서 무엇을 했는지'에 답할 수 있게 도와줍니다. 감사 로그를 사용하여 보안, 감사, 규정 준수 항목이 Spanner Omni 데이터 및 시스템에서 취약점 발생 또는 외부 데이터 오용 가능성을 모니터링할 수 있습니다.

시작하기 전에

TLS 또는 상호 TLS(mTLS) 암호화를 사용하여 Spanner Omni 배포를 구성합니다. TLS 또는 mTLS 암호화 없이 배포를 만들면 감사 로그가 생성되지 않습니다. TLS 또는 mTLS 암호화로 배포를 만드는 방법은 다음을 참고하세요.

감사 로그 유형

Spanner Omni는 다음 유형의 감사 로그를 지원합니다.

관리자 활동 감사 로그

관리자 활동 감사 로그에는 배포의 구성 또는 메타데이터를 수정하는 API 호출이 기록됩니다. 예를 들어 사용자가 데이터베이스를 만들면 Spanner Omni는 관리자 활동 감사 로그를 작성합니다.

관리자 활동 감사 로그는 TLS 및 mTLS 암호화로 구성된 배포에 대해 기본적으로 생성됩니다. 이러한 로그는 사용자가 구성, 제외, 중지할 수 없습니다.

관리자 활동 감사 로그를 작성하는 메서드 목록은 권한 유형별 메서드를 참고하세요.

데이터 액세스 감사 로그

데이터 액세스 감사 로그에는 배포의 구성 또는 메타데이터를 읽는 API 호출뿐만 아니라 사용자 데이터를 생성, 수정 또는 읽는 API 호출도 기록됩니다. 예를 들어 사용자가 데이터베이스를 설명하거나 SQL 쿼리를 실행하거나 데이터 조작 언어 (DML) 문을 실행하면 Spanner Omni는 데이터 액세스 감사 로그를 작성합니다.

데이터 액세스 감사 로그는 크기가 클 수 있으므로 기본적으로 사용 중지되어 있습니다. 데이터 액세스 이벤트를 기록하려면 명시적으로 사용 설정하고 구성하세요. 데이터 액세스 감사 로그는 Google 지원팀에서 문제를 해결하는 데 도움이 되므로 사용 설정하는 것이 좋습니다.

이러한 로그를 구성하는 방법은 데이터 액세스 감사 로그 구성을 참고하세요. 데이터 액세스 감사 로그를 작성하는 메서드 목록은 권한 유형별 메서드를 참고하세요.

시스템 이벤트 감사 로그

시스템 이벤트 감사 로그는 시스템이 직접적인 사용자 작업 없이 Spanner Omni 리소스의 구성을 수정하는 시점을 기록합니다. 예를 들어 시스템이 새로 복원된 데이터베이스를 자동으로 최적화하거나 예약된 백업을 만들면 Spanner Omni는 시스템 이벤트 감사 로그를 작성합니다.

TLS 및 mTLS 암호화로 구성된 배포의 경우 시스템 이벤트 감사 로그가 기본적으로 생성됩니다. 이러한 로그는 사용자가 구성, 제외, 중지할 수 없습니다.

이러한 로그를 생성하는 시스템 이벤트에 대한 자세한 내용은 시스템 이벤트를 참고하세요.

데이터 액세스 감사 로그 구성

데이터 액세스 감사 로그를 사용 설정하려면 Spanner Omni CLI 또는 API를 사용하여 배포의 Identity and Access Management (IAM) 정책을 구성하세요. 특정 권한 유형에 대해 로깅을 사용 설정하고 특정 사용자를 로깅에서 제외할 수 있습니다.

필수 권한

데이터 액세스 감사 로그를 구성하려면 spanner.instances.setIamPolicy 권한이 필요합니다.

데이터 액세스 감사 로그 구성을 보려면 spanner.instances.getIamPolicy 권한이 필요합니다.

권한 유형

API 메서드는 IAM 권한을 확인하며 각 권한에는 연결된 권한 유형이 있습니다. 데이터 액세스 감사 로그를 구성할 때 로깅할 권한 유형을 지정합니다. 권한 유형은 다음과 같이 분류됩니다.

데이터 액세스 권한 유형:

  • ADMIN_READ: 메타데이터 또는 구성 정보를 읽는 API 메서드를 기록합니다. 예를 들어 데이터베이스를 설명합니다.
  • DATA_READ: 사용자 데이터를 읽는 API 메서드를 기록합니다. 예를 들어 SQL 쿼리를 실행합니다.
  • DATA_WRITE: 사용자 데이터를 쓰는 API 메서드를 기록합니다. 예를 들어 DML 문을 실행합니다.

관리자 활동 권한 유형:

  • ADMIN_WRITE: 메타데이터 또는 구성 정보를 쓰는 API 메서드 (예: 데이터베이스 생성)에 대해 확인됩니다. 이러한 작업은 관리자 활동 감사 로그를 생성하며 구성할 수 없습니다.

권한 유형에 대한 자세한 설명은 Cloud 감사 로그 문서의 권한 유형을 참고하세요.

Spanner Omni CLI를 사용하여 구성

Spanner Omni CLI를 사용하여 데이터 액세스 감사 로그를 구성하려면 사용 설정할 로그 유형과 제외된 구성원을 나열하는 JSON 정책 파일을 만든 후 정책을 적용합니다.

  1. policy.json라는 정책 파일을 만듭니다.

    {
      "auditConfigs": [
        {
          "auditLogConfigs": [
            {
              "logType": "ADMIN_READ",
              "exemptedMembers": [
                "USER_NAME"
              ]
            },
            {
              "logType": "DATA_WRITE"
            },
            {
              "logType": "DATA_READ"
            }
          ],
          "service": "spanner.googleapis.com"
        }
      ]
    }
    
  2. spanner instances set-iam-policy 명령어를 사용하여 정책을 적용합니다.

    spanner instances set-iam-policy default policy.json
    

현재 데이터 액세스 감사 로그 구성을 보려면 다음 명령어를 실행합니다.

spanner instances get-iam-policy default

일반적인 구성 사용 사례의 예를 더 보려면 Cloud 감사 로그 문서의 데이터 액세스 감사 로그 구성을 참고하세요.

시스템 이벤트

Spanner Omni는 관리 버전의 Spanner에서 지원하는 대부분의 시스템 이벤트에 대해 시스템 이벤트 감사 로그를 생성합니다. 자세한 내용은 Spanner 문서의 시스템 이벤트를 참고하세요.

Spanner Omni는 CreateScheduledBackupOptimizeRestoredDatabase 시스템 이벤트를 지원합니다. 하지만 Spanner Omni에서는 자동 확장을 사용할 수 없으므로 Spanner Omni는 AutoscaleInstance 시스템 이벤트를 지원하지 않습니다.

감사 로그 파일 및 보관

Spanner Omni는 Spanner Omni 서버의 로컬 파일 시스템에 감사 로그를 작성합니다.

다음 경로와 이름 지정 규칙을 사용하여 감사 로그 파일을 찾습니다. BASE_DIR/logs/PROCESS/audit.log.BUCKET.TIMESTAMP.PROCESS_ID

  • BASE_DIR: Spanner Omni 배포를 시작할 때 지정한 기본 디렉터리입니다. Kubernetes 배포의 경우 기본값은 /spanner입니다.

  • PROCESS: Spanner Omni는 서버당 server, zone_services, zonal_zone_services, zonal_server, base_services과 같은 여러 프로세스를 실행합니다. 감사 로그는 감사 로그를 생성한 프로세스에 해당하는 디렉터리에 작성됩니다.

  • BUCKET: 관리자 활동 및 시스템 이벤트 감사 로그는 required 버킷에 기록되고 데이터 액세스 감사 로그는 default 버킷에 기록됩니다.

  • TIMESTAMP: 파일이 생성된 시점의 타임스탬프입니다.

  • PROCESS_ID: 감사 로그를 쓰는 프로세스의 프로세스 ID입니다.

Spanner Omni는 현재 파일이 50MiB를 초과하거나 서버 프로세스가 다시 시작되면 새 감사 로그 파일을 만듭니다. 또한 BASE_DIR/logs/PROCESS/audit.log.BUCKET에서 작성 중인 감사 로그 파일로의 심볼릭 링크를 자동으로 유지합니다.

로컬 감사 로그 파일에 대한 액세스는 파일 시스템 액세스 제어 목록 (ACL)에 의해 제어됩니다. 서버에 로그인하고 이러한 파일에 액세스할 수 있는 권한이 있는 사용자는 누구나 감사 로그를 볼 수 있습니다.

승인된 인력만 로그를 볼 수 있도록 Spanner Omni VM에 대한 액세스를 제한하는 것이 좋습니다(예: SSH 액세스 제한 및 파일 시스템 ACL 구성). 장기 저장, 감사, 규정 준수를 위해서는 로깅 에이전트 (예: Fluentd)를 사용하여 감사 로그를 수집하고 AWS CloudWatch, Grafana Loki, Elasticsearch, Datadog, Splunk, Cloud Monitoring과 같은 외부 로깅 시스템으로 내보내세요.

파일 보관

Spanner Omni는 로컬 감사 로그 파일에 대해 크기 기반 및 기간 기반 보관 정책을 모두 적용합니다.

  • 크기 제한: 감사 로그 파일은 총 디스크 사용량이 1GB를 초과할 때까지 보관됩니다. 로그 디렉터리에 별도의 디스크를 사용하는 경우 감사 로그 파일에는 해당 디스크의 총 공간 중 25% 할당량이 할당됩니다.

  • 보관 기간: 감사 로그 파일은 크기 제한을 초과하지 않는 경우 최대 14일 동안 보관됩니다.

두 한도 중 하나에 도달하면 Spanner Omni는 가장 오래된 로그 파일을 먼저 삭제합니다. 감사 로그를 14일 이상 보관해야 하는 경우 외부 로깅 시스템으로 내보내세요.

감사 로그 항목 구조

Spanner Omni 감사 로그 항목은 JSON 형식으로 지정되며 Spanner와 동일한 구조적 정의를 사용합니다. 자세한 내용은 Cloud 감사 로그 문서의 감사 로그 항목 구조를 참고하세요.

로그 이름

Spanner의 멀티 테넌트 관리 버전과 달리 Spanner Omni는 전용 서버에서 단독 테넌트 배포로 실행됩니다. 이러한 서버에는 다른 테넌트나 프로젝트가 없으므로 모든 감사 로그 항목은 프로젝트 식별자 default를 사용합니다.

projects/default/logs/cloudaudit.googleapis.com/activity
projects/default/logs/cloudaudit.googleapis.com/data_access
projects/default/logs/cloudaudit.googleapis.com/system_event

호출자 ID

감사 로그는 로깅된 작업을 수행한 사용자의 ID를 기록합니다. 호출자 ID는 AuditLog 객체의 AuthenticationInfo 필드에 저장됩니다.

Spanner Omni에서 호출자의 ID는 API 호출을 실행한 인증된 사용자의 사용자 이름입니다. 사용자 만들기 및 관리에 관한 자세한 내용은 인증 및 승인을 참고하세요.

호출자의 IP 주소

Spanner Omni는 감사 로그에 호출자의 IP 주소 기록을 지원하지 않습니다.

권한 유형별 메서드

API 메서드를 호출하면 Spanner Omni에서 메서드를 실행하는 데 필요한 권한 유형에 따라 감사 로그를 생성합니다. ADMIN_READ, DATA_READ 또는 DATA_WRITE 권한이 필요한 메서드는 데이터 액세스 감사 로그를 생성하고 ADMIN_WRITE 권한이 필요한 메서드는 관리자 활동 감사 로그를 생성합니다.

Spanner Omni는 대부분의 Cloud Spanner API 메서드를 지원합니다. Spanner와 Spanner Omni에서 공유하는 메서드의 감사 로깅 분류는 Spanner 문서의 권한 유형별 메서드를 참고하세요.

또한 Spanner Omni에는 감사 로그를 생성하는 고유한 API 메서드가 도입되었습니다. 장기 실행 작업 (LRO)으로 표시된 메서드는 일반적으로 감사 로그 항목을 작업이 시작될 때 하나, 작업이 종료될 때 하나 등 2개를 생성합니다. 자세한 내용은 Cloud 감사 로그 문서의 장기 실행 작업을 참고하세요.

권한 유형 메서드
ADMIN_READ google.spanner.omni.v1.OmniAdmin.GetLocation
google.spanner.omni.v1.OmniAdmin.ListLocation
google.spanner.omni.v1.OmniAdmin.GetLocationDistance
google.spanner.omni.v1.OmniAdmin.ListLocationDistance
google.spanner.omni.v1.OmniAdmin.GetZone
google.spanner.omni.v1.OmniAdmin.ListZones
google.spanner.omni.v1.OmniAdmin.GetServer
google.spanner.omni.v1.OmniAdmin.ListServers
google.spanner.omni.v1.OmniAdmin.GetDeployment
google.spanner.omni.v1.OmniAdmin.ListBackupDescriptors
google.spanner.omni.v1.OmniAdmin.GetExternalStorage
google.spanner.omni.v1.OmniAdmin.ListExternalStorages
google.spanner.omni.v1.OmniAdmin.GetIamPolicy
google.spanner.omni.v1.UsersService.GetUser
google.spanner.omni.v1.UsersService.ListUsers
google.spanner.omni.v1.UsersService.GetRole
google.spanner.omni.v1.UsersService.ListRoles
ADMIN_WRITE google.spanner.omni.v1.OmniAdmin.CreateLocation
google.spanner.omni.v1.OmniAdmin.DeleteLocation
google.spanner.omni.v1.OmniAdmin.CreateLocationDistance
google.spanner.omni.v1.OmniAdmin.UpdateLocationDistance
google.spanner.omni.v1.OmniAdmin.DeleteLocationDistance
google.spanner.omni.v1.OmniAdmin.CreateZone
google.spanner.omni.v1.OmniAdmin.DeleteZone
google.spanner.omni.v1.OmniAdmin.CreateServer
google.spanner.omni.v1.OmniAdmin.DeleteServer
google.spanner.omni.v1.OmniAdmin.CreateExternalStorage
google.spanner.omni.v1.OmniAdmin.DeleteExternalStorage
google.spanner.omni.v1.OmniAdmin.SetIamPolicy
google.spanner.omni.v1.OmniAdmin.ImportBackup (LRO)
google.spanner.omni.v1.UsersService.CreateUser
google.spanner.omni.v1.UsersService.DeleteUser
google.spanner.omni.v1.UsersService.UpdateUser
DATA_READ google.spanner.omni.v1.ImportExportService.ExportDatabase (LRO)
DATA_WRITE google.spanner.omni.v1.ImportExportService.ImportDatabase (LRO)

감사 로그를 생성하지 않는 메서드

Spanner Omni는 Spanner와 동일한 메서드를 감사 로깅에서 제외합니다. 이러한 메서드는 상당한 로그 생성 및 스토리지 비용이 발생하는 대용량 메서드이거나 감사 값이 낮거나 다른 감사 또는 플랫폼 로그에서 이미 메서드 범위를 제공하므로 제외됩니다. 이러한 제외된 메서드의 전체 목록은 Spanner 문서의 제외된 메서드를 참고하세요.

또한 google.spanner.omni.v1.LoginService.Login 메서드는 인증 및 승인 검사보다 먼저 실행되므로 감사 로그를 생성하지 않습니다.

처리 기간

감사 로그의 처리 기간 필드는 감사 로그 작성 지연이 아닌 SQL 쿼리 실행 기간과 같은 API의 처리 기간을 기록합니다. 자세한 내용은 Spanner 문서의 처리 기간을 참고하세요.

관리형 Spanner와의 비교

Spanner Omni의 감사 로깅은 Spanner와 핵심 개념 및 형식을 공유하지만 로그가 저장, 구성, 관리되는 방식에는 몇 가지 주요 차이점이 있습니다.

차이점

  • 로그 대상: Spanner Omni는 감사 로그를 Cloud Logging으로 내보내는 대신 Spanner Omni 서버의 로컬 파일 시스템에 직접 작성합니다.

  • 구성: Spanner에서 Google Cloud 콘솔, Google Cloud CLI 또는 Identity and Access Management API를 사용하여 프로젝트 수준에서 데이터 액세스 감사 로그를 구성합니다. Spanner Omni에서는 Spanner Omni CLI 또는 Spanner Omni API를 사용하여 데이터 액세스 감사 로그를 구성합니다.

  • TLS 및 mTLS 암호화: Spanner는 기본적으로 TLS 암호화를 적용하며 사용 중지할 수 없습니다. Spanner Omni에서 TLS 또는 mTLS 암호화 없이 배포하도록 선택하면 감사 로그가 생성되지 않습니다.

  • 보관: Spanner 감사 로그는 로깅 보관 설정에 따라 로깅에 보관됩니다. Spanner Omni는 최대 14일 동안 또는 디스크 크기 제한에 도달할 때까지 로컬 감사 로그 파일을 보관하며, 장기 저장을 위해 로그를 외부 시스템으로 내보내야 합니다.

유사점

  • 로그 형식: 두 제품 모두 표준 Google Cloud AuditLog 구조에 따라 JSON 형식으로 감사 로그를 작성합니다.

  • 데이터 액세스 구성: 두 제품 모두 권한 유형 (ADMIN_READ, DATA_READ, DATA_WRITE)별로 세부적으로 데이터 액세스 감사 로그를 사용 설정할 수 있으며 특정 사용자를 로깅에서 제외할 수 있습니다.

다음 단계