이 페이지에서는 사용자 관리형 서비스 계정으로 구성된 싱크를 만들어 로그를 라우팅하는 방법을 설명합니다. 기본적으로 Logging은 리소스의 모든 싱크에 Logging 서비스 계정을 사용합니다. 하지만 로그 싱크가 다른 프로젝트에 있는 경우 자체 사용자 관리형 서비스 계정을 만들고 관리하여 사용자 관리형 서비스 계정을 포함하는 프로젝트에서 Identity and Access Management 권한을 중앙에서 관리할 수 있습니다.
싱크 대상이 로그 버킷 또는 Google Cloud 프로젝트인 경우에만 사용자 관리형 서비스 계정을 사용하는 싱크를 만들 수 있습니다. 이 문서의 예시에서는 대상이 로그 버킷인 사용자 관리형 서비스 계정을 사용하는 싱크를 설정하는 방법을 보여줍니다.
시작하기 전에
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
사용자 관리 서비스 계정이 있는지 확인한 후 다음 변수를 사용자 관리 서비스 계정에 적절한 값으로 설정합니다.
CUSTOM_SA_PROJECT_ID: 사용자 관리형 서비스 계정이 포함된 프로젝트의 프로젝트 ID입니다.
CUSTOM_SA: 사용자 관리형 서비스 계정의 이메일 주소입니다.
서비스 계정을 만드는 방법에 대한 자세한 내용은 서비스 계정 만들기를 참조하세요.
로그 싱크의 대상으로 사용될 수 있는 로그 버킷이 있는지 확인한 후 다음 변수를 로그 버킷에 적합한 값으로 설정합니다. 필요한 경우 로그 버킷을 만듭니다.
LOG_BUCKET_PROJECT_ID: 로그 버킷이 포함된 프로젝트의 프로젝트 ID입니다.
LOCATION: 로그 버킷 위치입니다.
BUCKET_NAME: 로그 버킷 이름입니다.
로그 싱크를 만들려는 프로젝트에 있는 Logging 서비스 계정의 이름을 식별한 후 다음 변수를 적절한 값으로 설정합니다.
SINK_PROJECT_ID: 로그 싱크를 만들려는 프로젝트의 프로젝트 ID입니다.
LOGGING_SA: 기본 Logging 서비스 계정의 이메일 주소입니다. 이 주소를 가져오려면 다음 명령어를 실행합니다.
gcloud logging settings describe --project=SINK_PROJECT_ID
응답에서
loggingServiceAccountId
로 시작하는 줄에는 서비스 계정의 이메일 주소가 나열됩니다.
사용자 관리형 서비스 계정이 포함된 프로젝트에서 조직 정책 불리언 제약조건
iam.disableCrossProjectServiceAccountUsage
가 적용되지 않는지 확인합니다. 기본적으로 이 제약조건은 적용됩니다. 서비스 계정을 다른 프로젝트의 리소스에 연결할 수 있도록 이 제약조건을 사용 중지하려면 다음 명령어를 실행합니다.gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_ID
프로젝트 간 서비스 계정 사용 설정에 관한 자세한 내용은 프로젝트 간 서비스 계정 연결 사용 설정을 참조하세요.
IAM 역할 부여
이 섹션에서는 사용자 관리형 서비스 계정을 사용하는 싱크를 만들기 위한 기본 요건을 설명합니다.
사용자 관리형 서비스 계정이 싱크 대상에 로그 항목을 쓰도록 허용
사용자 관리형 서비스 계정에 후속 단계에서 만들 싱크의 대상에 로그 항목을 쓸 수 있는 권한을 부여합니다. 싱크의 대상은 LOG_BUCKET_PROJECT_ID라는 프로젝트에 저장된 로그 버킷입니다.
사용자 관리형 서비스 계정에 필요한 권한을 부여하려면 로그 버킷이 포함된 프로젝트에서 로그 버킷 작성자 역할(roles/logging.bucketWriter
)을 부여합니다.
gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'
이전 명령어에 대한 자세한 내용은 gcloud projects add-iam-policy-binding
을 참조하세요.
서비스 계정 가장 구성
기본 Cloud Logging 서비스 계정 LOGGING_SA가 사용자 관리형 서비스 계정 CUSTOM_SA를 가장할 수 있도록 구성합니다. 사용자 관리형 서비스 계정을 사용하는 로그 싱크를 만들려는 Google Cloud 프로젝트에 기본 Cloud Logging 서비스 계정이 있습니다.
서비스 계정 가장을 구성하려면 사용자 관리형 서비스 계정의 Cloud Logging 서비스 계정에 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator
)을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='serviceAccount:LOGGING_SA' \
--role='roles/iam.serviceAccountTokenCreator'
서비스 계정 명의 도용 시 리소스에 액세스할 수 있는 권한이 없는 서비스 계정과 리소스에 액세스할 수 있는 권한이 있는 권한 보유 서비스 계정의 두 가지 주 구성원이 연관됩니다. 이 경우 사용자 관리형 서비스 계정은 LOG_BUCKET_PROJECT_ID라는 프로젝트의 로그 버킷인 싱크 대상에 로그 항목을 쓸 수 있으므로 권한 보유 계정입니다. Logging 서비스 계정에는 로그를 라우팅할 수 있는 권한이 있습니다.
서비스 계정 토큰 생성자 역할에 대한 자세한 내용은 서비스 계정 관리 및 가장 역할: 서비스 계정 토큰 생성자 역할을 참조하세요.
서비스 계정 가장에 대한 자세한 내용은 서비스 계정 가장 정보를 참조하세요.
주 구성원이 작업을 사용자 관리형 서비스 계정으로 실행하도록 허용
싱크를 만들 주 구성원에게 사용자 관리형 서비스 계정으로 작업을 실행하는 데 필요한 권한을 부여합니다.
필요한 권한을 부여하려면 사용자 관리형 서비스 계정 CUSTOM_SA_PROJECT_ID를 저장하는 Google Cloud 프로젝트에서 주 구성원에게 서비스 계정 사용자 역할(roles/iam.serviceAccountUser
)을 부여합니다.
다음 명령어를 실행하기 전에 다음을 바꿉니다.
- PRINCIPAL: 역할을 부여할 주 구성원의 식별자입니다. 주 구성원 식별자는 일반적으로
PRINCIPAL-TYPE:ID
형식입니다. 예를 들면user:my-user@example.com
입니다.PRINCIPAL
형식 전체 목록은 주 구성원 식별자를 참조하세요.
gcloud iam service-accounts add-iam-policy-binding
명령어를 실행합니다.
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'
커스텀 역할을 사용하는 경우 주 구성원에게 iam.serviceAccounts.actAs
권한이 필요합니다.
서비스 계정 사용자 역할에 대한 자세한 내용은 서비스 계정 관리 및 가장을 위한 역할: 서비스 계정 사용자 역할을 참조하세요.
사용자 관리형 서비스 계정을 사용하는 로그 싱크 만들기
사용자 관리형 서비스 계정으로 싱크를 만들려면 gcloud logging sinks create
명령어를 실행하고 --custom-writer-identity
옵션을 포함합니다.
다음 명령어를 실행하기 전에 다음을 바꿉니다.
- SINK_NAME: 로그 싱크의 이름
gcloud logging sinks create
명령어를 실행합니다.
gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
싱크가 로그를 라우팅하는지 확인
이 섹션에서는 gcloud CLI를 사용하여 로그 항목을 쓰고 읽고 싱크가 로그를 올바르게 라우팅하는지 확인합니다.
싱크가 로그를 올바르게 라우팅하는지 확인하려면 다음을 수행합니다.
gcloud logging write
명령어를 실행합니다.다음 명령어를 실행하기 전에 다음을 바꿉니다.
- LOG_NAME: 로그의 이름입니다. 예를 들어 이 필드를
mylog
로 설정할 수 있습니다.
gcloud logging write
명령어를 실행합니다.gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
이전 명령어는 다음 메시지를 반환합니다.
Created log entry.
- LOG_NAME: 로그의 이름입니다. 예를 들어 이 필드를
방금 작성한 로그 항목을 읽으려면 다음 명령어를 실행합니다.
gcloud logging read 'textPayload="Test log entry"' \ --bucket=BUCKET_NAME --location=LOCATION \ --view=_AllLogs --project=SINK_PROJECT_ID
다음 단계
로그를 지원되는 대상으로 라우팅하는 방법에 대해 알아보려면 지원되는 대상으로 로그 라우팅을 참조하세요.
Logging이 로그를 라우팅 및 저장하는 방식에 대한 개요는 라우팅 및 스토리지 개요를 참조하세요.
싱크를 사용하여 로그를 라우팅할 때 문제가 발생하면 로그 라우팅 문제 해결을 참조하세요.
대상에서 라우팅된 로그를 확인하는 방법과 로그 형식 및 구성 방식을 알아보려면 싱크 대상의 로그 보기를 참조하세요.