액세스 제어 가이드

이 페이지에서는 Cloud Logging이 ID 및 액세스 관리(IAM)를 사용하여 Google Cloud 리소스의 로깅 데이터에 대한 액세스를 제어하는 방법을 설명합니다.

개요

IAM 권한 및 역할에 따라 Logging API, 로그 탐색기, gcloud 명령줄 도구 사용 방법이 결정됩니다.

로그는 Google Cloud 프로젝트, 조직, 폴더, 결제 계정 내 로그 버킷에 있습니다. 이러한 각 Google Cloud 리소스에는 고유한 Cloud Logging 역할 및 권한 집합이 있는 자체 구성원 집합이 있을 수 있습니다.

Google Cloud 프로젝트에서 로깅 데이터와 함께 Logging을 사용하려는 사용자는 Logging 사용 권한을 부여하는 IAM 역할이 할당된 구성원이어야 합니다. Logging에 적용되는 IAM 역할은 다음과 같습니다.

  • roles/logging.viewer(로그 뷰어)는 액세스 투명성 로그와 데이터 액세스 감사 로그를 제외한 모든 Logging 기능에 대한 읽기 전용 액세스 권한을 부여합니다.

  • roles/logging.privateLogViewer(비공개 로그 뷰어)에는 roles/logging.viewer의 권한과 함께 액세스 투명성 로그 및 데이터 액세스 감사 로그를 읽을 수 있는 권한이 있습니다. 이 역할은 _Required_Default 버킷에만 적용됩니다.

  • roles/logging.logWriter(로그 작성자)는 서비스 계정에 부여되어, 애플리케이션에 로그를 작성하는 데 필요한 권한만 부여합니다. 이 역할은 보기 권한을 부여하지 않습니다.

  • 로그 버킷에 로그를 기록하기 위해 충분한 권한을 Cloud Logging에 제공할 수 있도록 roles/logging.bucketWriter(로그 버킷 작성자)를 서비스 계정에 부여할 수 있습니다. 이 역할을 특정 버킷으로 제한하기 위해서는 IAM 조건을 사용합니다. 예시는 프로젝트의 로그를 다른 프로젝트의 다른 버킷으로 라우팅을 참조하세요.

  • roles/logging.configWriter(로그 구성 작성자)는 로그 기반 측정항목, 제외, 버킷, 보기를 만들고 싱크를 내보낼 수 있는 권한을 부여합니다. 이러한 작업에 로그 탐색기(Console)를 사용하려면 roles/logging.viewer를 추가하세요.

  • roles/logging.admin(Logging 관리자)은 Logging과 관련된 모든 권한을 부여합니다.

  • roles/logging.viewAccessor(로그 뷰 접근자)는 뷰에서 로그를 읽을 수 있는 권한을 제공합니다. 이 역할을 특정 버킷의 뷰로 제한하려면 IAM 조건을 사용합니다. 예시는 버킷에서 로그 읽기를 참조하세요.

  • roles/viewer(프로젝트 뷰어)는 roles/logging.viewer와 동일합니다. 이 역할은 액세스 투명성 로그와 데이터 액세스 감사 로그를 제외한 모든 Logging 기능에 대한 읽기 전용 액세스 권한을 부여합니다. 이 역할은 _Required_Default 버킷에만 적용됩니다.

  • roles/editor(프로젝트 편집자)에는 roles/logging.viewer의 권한과 함께 로그 항목을 작성하고, 로그를 삭제하고, 로그 기반 측정항목을 만들 수 있는 권한이 있습니다. 이 역할이 할당된 사용자는 내보내기 싱크를 만들거나 액세스 투명성 로그 또는 데이터 액세스 감사 로그를 읽을 수는 없습니다.

  • roles/owner(프로젝트 소유자)는 액세스 투명성 로그와 데이터 액세스 감사 로그를 비롯하여 Logging에 대한 전체 액세스 권한을 부여합니다.

Logging 역할 및 권한에 관한 자세한 내용은 이 페이지의 권한 및 역할을 참조하세요.

역할 부여

구성원에게 역할을 부여하려면 roles/owner(프로젝트 소유자)가 갖는 모든 권한을 갖고 있어야 합니다. 역할 부여 방법을 알아보려면 액세스 권한 부여, 변경, 취소를 참조하세요.

Google Cloud 리소스에 액세스하려는데 필요한 권한이 없다면 리소스의 소유자로 등록된 구성원에게 문의하세요.

권한 및 역할

다음 표에는 Cloud Logging에 대한 액세스 권한을 부여하는 IAM 역할이 나와 있습니다. 각 역할마다 특정한 로깅 권한 세트가 있습니다. 여기에 나열된 리소스 유형의 멤버에게 역할을 할당할 수 있습니다.

이 표에서 a.b.{x,y}a.b.xa.b.y를 의미합니다.

역할 이름 역할 칭호 Logging 권한 리소스 유형
roles/
logging.viewer
로그 뷰어 logging.logEntries.list
logging.logMetrics.{list, get}
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
logging.sinks.{list, get}
logging.buckets.{list, get}
logging.usage.get
resourcemanager.projects.get
logging.queries.{get, list, update, create, delete}
프로젝트, 조직,
폴더, 결제 계정
roles/
logging.privateLogViewer
비공개 로그 뷰어 roles/logging.viewer 권한과 다음 권한 추가:
logging.privateLogEntries.list
프로젝트, 조직,
폴더, 결제 계정
roles/
logging.logWriter
로그 작성자 logging.logEntries.create 프로젝트, 조직,
폴더, 결제 계정
roles/
logging.configWriter
로그 구성 작성자 logging.buckets.{list, create, get, update, delete, undelete}
logging.cmekSettings.{get, update}
logging.exclusions.{list, create, get, update, delete}
logging.locations.{list, get}
logging.logMetrics.{list, create, get, update, delete}
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
logging.sinks.{list, create, get, update, delete}
logging.views.{list, create, get, update, delete}
resourcemanager.projects.{get, list}
프로젝트, 조직,
폴더, 결제 계정
roles/
logging.bucketWriter
로그 버킷 작성자 logging.buckets.write 프로젝트
roles/
logging.viewAccessor
로그 뷰어 접근자 logging.views.{access, listLogs, listResourceKeys, listResourceValues}
프로젝트, 조직,
폴더, 결제 계정
roles/
logging.admin
Logging 관리자 logging.exclusions.{list, create, get, update, delete}
logging.locations.{list, get}
logging.logEntries.{create, list}
logging.logMetrics.{list, create, get, update, delete}
logging.logs.{delete, list}
logging.logServiceIndexes.list
logging.logServices.list
logging.privateLogEntries.list
logging.sinks.{list, create, get, update, delete}
logging.buckets.{list, get, update, create, delete, undelete}
logging.views.{list, access, create, get, update, delete, listLogs, listResourceKeys, listResourceValues}
logging.cmekSettings.{get, update}
logging.usage.get
resourcemanager.projects.{get, list}
logging.queries.{get, list, update, create, delete, share, updateShared, listShared}
프로젝트, 조직,
폴더, 결제 계정
roles/viewer 뷰어 logging.logEntries.list
logging.logMetrics.{list, get}
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
logging.sinks.{list, get}
resourcemanager.projects.get
logging.queries.{get, list, update, create, delete, listShared}
프로젝트, 조직,
폴더
roles/editor 편집자 roles/viewer Logging 권한과 다음 권한 추가:
logging.logEntries.create
logging.logMetrics.{create, update, delete}
logging.logs.delete
logging.queries.{get, list, update, create, delete, listShared}
프로젝트, 조직,
폴더
roles/owner 소유자 roles/editor Logging 권한과 다음 권한 추가:
logging.privateLogEntries.list
logging.sinks.{create, update, delete}
logging.queries.{get, list, update, create, delete, share, updateShared, listShared}
프로젝트, 조직,
폴더

커스텀 역할

Logging 권한이 있는 커스텀 역할을 만들려면 다음과 같이 하세요.

  • Logging API에 대한 권한을 부여하는 역할이라면 API 권한의 권한 중에서 선택합니다.

  • 로그 탐색기 사용 권한을 부여하는 역할이라면 Console 권한의 권한 그룹 중에서 선택합니다.

  • gcloud logging 사용 권한을 부여하는 역할이라면 gcloud 도구의 개요로 이동합니다.

커스텀 역할에 대한 자세한 내용은 IAM 커스텀 역할 이해를 참조하세요.

API 권한

Logging API 메서드에는 특정 IAM 권한이 필요합니다. 다음 표에는 API 메서드별로 필요한 권한이 나와 있습니다.

Logging 메서드 필요한 권한 리소스 유형
billingAccounts.logs.* logging.logs.*(projects.logs.* 참조) 결제 계정
billingAccounts.sinks.* logging.sinks.*(projects.sinks.* 참조) 결제 계정
billingAccounts.locations.buckets.* logging.buckets.*(projects.locations.buckets.* 참조) 결제 계정
entries.list logging.logEntries.list 또는
logging.privateLogEntries.list
프로젝트, 조직,
폴더, 결제 계정
entries.tail logging.logEntries.list 또는
logging.privateLogEntries.list
프로젝트, 조직,
폴더, 결제 계정
entries.write logging.logEntries.create 프로젝트, 조직,
폴더, 결제 계정
folders.logs.* logging.logs.*(projects.logs.* 참조) 폴더
folders.sinks.* logging.sinks.*(projects.sinks.* 참조) 폴더
folders.locations.buckets.* logging.buckets.*(projects.locations.buckets.* 참조) 폴더
monitoredResourceDescriptors.list (없음) (없음)
organizations.logs.* logging.logs.*(projects.logs.* 참조) 조직
organizations.sinks.* logging.sinks.*(projects.sinks.* 참조) 조직
organizations.locations.buckets.* logging.buckets.*(projects.locations.buckets.* 참조) 조직
projects.exclusions.create logging.exclusions.create 프로젝트
projects.exclusions.delete logging.exclusions.delete 프로젝트
projects.exclusions.get logging.exclusions.get 프로젝트
projects.exclusions.list logging.exclusions.list 프로젝트
projects.exclusions.patch logging.exclusions.update 프로젝트
projects.logs.list logging.logs.list 프로젝트
projects.logs.delete logging.logs.delete 프로젝트
projects.sinks.list logging.sinks.list 프로젝트
projects.sinks.get logging.sinks.get 프로젝트
projects.sinks.create logging.sinks.create 프로젝트
projects.sinks.update logging.sinks.update 프로젝트
projects.sinks.delete logging.sinks.delete 프로젝트
projects.locations.buckets.list logging.buckets.list 프로젝트
projects.locations.buckets.get logging.buckets.get 프로젝트
projects.locations.buckets.patch logging.buckets.update 프로젝트
projects.locations.buckets.create logging.buckets.create 프로젝트
projects.locations.buckets.delete logging.buckets.delete 프로젝트
projects.locations.buckets.undelete logging.buckets.undelete 프로젝트
projects.metrics.list logging.logMetrics.list 프로젝트
projects.metrics.get logging.logMetrics.get 프로젝트
projects.metrics.create logging.logMetrics.create 프로젝트
projects.metrics.update logging.logMetrics.update 프로젝트
projects.metrics.delete logging.logMetrics.delete 프로젝트

콘솔 권한

다음 표에는 로그 탐색기를 사용하는 데 필요한 권한이 나와 있습니다.

이 표에서 a.b.{x,y}a.b.xa.b.y를 의미합니다.

Console 활동 필수 권한
최소한의 읽기 전용 액세스 logging.logEntries.list
logging.logs.list
logging.logServiceIndexes.list
logging.logServices.list
resourcemanager.projects.get
데이터 액세스 감사 로그를 보는 기능 추가 logging.privateLogEntries.list 추가
액세스 투명성 로그를 볼 수 있는 기능 추가 logging.privateLogEntries.list 추가
로그 기반 측정항목을 볼 수 있는 기능 추가 logging.logMetrics.{list, get} 추가
내보내기를 보는 기능 추가 logging.sinks.{list, get} 추가
로그 사용량을 보는 기능 추가 logging.usage.get 추가
로그를 제외하는 기능 추가 logging.exclusions.{list, create, get, update, delete} 추가
로그를 내보내는 기능 추가 logging.sinks.{list, create, get, update, delete} 추가
로그 기반 측정항목을 만드는 기능 추가 logging.logMetrics.{list, create, get, update, delete} 추가

명령줄 권한

gcloud logging 명령어는 IAM 권한에 따라 제어됩니다.

gcloud logging 명령어를 사용하려면 serviceusage.services.use 권한이 있어야 합니다.

또한 로그 위치와 사용 사례에 해당하는 IAM 역할이 있어야 합니다. 자세한 내용은 명령줄 인터페이스 권한을 참조하세요.

내보낸 로그에 대한 액세스

로그를 내보내기 위해 싱크를 만들려면 roles/logging.configWriter, roles/logging.admin 또는 roles/owner의 권한이 있어야 합니다.

싱크는 로그 내보내기를 시작한 후부터 모든 수신 로그 항목에 대한 전체 액세스 권한을 갖습니다. 싱크는 액세스 투명성 로그와 데이터 액세스 감사 로그를 비롯한 비공개 로그 항목을 내보낼 수 있습니다.

로그 항목을 내보낸 후 내보낸 사본에 대한 액세스는 전적으로 대상 위치(Cloud Storage, BigQuery, Pub/Sub)에서의 IAM 권한과 역할에 따라 제어됩니다.

Logging 액세스 범위

액세스 범위는 Compute Engine VM 인스턴스의 권한을 지정하는 기존의 방법입니다. Logging API에는 다음과 같은 액세스 범위가 적용됩니다.

액세스 범위 부여된 권한
https://www.googleapis.com/auth/logging.read roles/logging.viewer
https://www.googleapis.com/auth/logging.write roles/logging.logWriter
https://www.googleapis.com/auth/logging.admin Logging API에 대한 전체 액세스 권한
https://www.googleapis.com/auth/cloud-platform Logging API와 기타 사용 설정된 모든 Google Cloud API에 대한 전체 액세스 권한

권장사항

  • 이제 IAM 역할을 사용할 수 있으므로 모든 VM 인스턴스에 '사용 설정된 모든 Google Cloud API에 대한 전체 액세스 권한' 범위를 제공하는 것이 좋습니다.

    https://www.googleapis.com/auth/cloud-platform

    VM 인스턴스의 서비스 계정에 특정 IAM 역할을 부여하여 특정 API에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 서비스 계정 권한을 참조하세요.

  • 제외 관리 권한이 포함된 커스텀 역할을 만들 때는 logging.exclusions.* 권한을 부여하는 대신 logging.sinks.* 권한을 역할에 부여하는 것이 좋습니다.

    제외 관리는 로그 싱크의 일부이므로, 제외를 포함하여 싱크 관리와 관련된 모든 권한이 logging.sinks.* 권한에 포함됩니다.