このページでは、ユーザー管理のサービス アカウントで構成されたシンクを作成してログをルーティングする方法について説明します。デフォルトでは、Logging はリソース内のすべてのシンクに Logging サービス アカウントを使用します。ただし、ログシンクが別のプロジェクトにある場合、独自のユーザー管理サービス アカウントを作成して管理できます。これにより、ユーザー管理のサービス アカウントを含むプロジェクトから Identity and Access Management の権限を集中管理できます。
シンクの宛先がログバケットの場合、ユーザー管理のサービス アカウントを使用するシンクのみ作成できます。
始める前に
このガイドのコマンドラインの例を使用するには、Google Cloud CLI をインストールして構成します。
ユーザー管理のサービス アカウントがあることを確認します。サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。
このドキュメントのコマンドを使用するには、次の値を指定します。
DESTINATION_PROJECT_ID: ログバケットを含むプロジェクトのプロジェクト ID。
CUSTOM_SA_PROJECT_ID: ユーザー管理のサービス アカウントを含むプロジェクトのプロジェクト ID。
SINK_PROJECT_ID: ログシンクを作成するように計画しているプロジェクトのプロジェクト ID。
CUSTOM_SA: ユーザー管理のサービス アカウント。サービス アカウントの作成方法については、サービス アカウントを作成するを参照してください。
ユーザー管理のサービス アカウントの形式は、次のようになります。
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
LOGGING_SA: デフォルトの Logging サービス アカウント。このメールを取得するには、次のコマンドを実行します。
gcloud logging settings describe --project=SINK_PROJECT_ID
出力には、サービス アカウントに関する次の情報が含まれます。
loggingServiceAccountId: serviceAccount:[email protected]
BUCKET_NAME: ログバケットの名前。
ログバケットのシンクの宛先パスは次のようになります。
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
ユーザー管理のサービス アカウントを含むプロジェクトで、組織のポリシーのブール型制約
iam.disableCrossProjectServiceAccountUsage
が適用されていないことを確認します。デフォルトでは、この制約が適用されます。この制約を無効にして、別のプロジェクトのリソースにサービス アカウントを接続できるようにするには、次のコマンドを実行します。gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_ID
プロジェクト間でサービス アカウントを有効にする方法については、サービス アカウントをプロジェクト間で接続できるようにするをご覧ください。
IAM ロールを付与する
このセクションでは、ユーザー管理のサービス アカウントを使用するシンクを作成するための前提条件について説明します。
ログシンクの宛先であるログバケットを含むプロジェクトで、次の操作を行います。
ログバケット書き込みロール(
roles/logging.bucketWriter
)をユーザー管理のサービス アカウントに付与します。このロールにより、ユーザー管理のサービス アカウントはログバケットにログを書き込めます。gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \ --member="serviceAccount:CUSTOM_SA" \ --role="roles/logging.bucketWriter"
ユーザー管理のサービス アカウントを使用するログシンクを作成する Google Cloud プロジェクトで、次の操作を行います。
サービス アカウント トークン作成者のロール(
roles/iam.serviceAccountTokenCreator
)を、ユーザー管理のサービス アカウントの Cloud Logging サービス アカウントに付与します。gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --project=CUSTOM_SA_PROJECT_ID \ --member="serviceAccount:LOGGING_SA" \ --role="roles/iam.serviceAccountTokenCreator"
上記のコマンドにより、サービス アカウント トークン作成者のロール(
roles/iam.serviceAccountTokenCreator
)を使用して、Logging サービス アカウントがユーザー管理のサービス アカウントの権限を借用できます。サービス アカウントのなりすましには、リソースへのアクセス権を持たないサービス アカウントとリソースにアクセスする権限を持つサービス アカウントの 2 つのプリンシパルが関与します。この場合、ユーザー管理のサービス アカウントは、宛先プロジェクトのログバケットにログを書き込むことができるため、権限のあるアカウントです。Logging サービス アカウントには、ログをルーティングする権限があります。
サービス アカウント トークン作成者のロールの詳細については、サービス アカウントの管理となりすましのロール: サービス アカウント トークン作成者のロールをご覧ください。
サービス アカウントの権限借用の詳細については、サービス アカウントの権限借用についてをご覧ください。
ログシンクを作成するプリンシパルにサービス アカウント ユーザーのロール(
roles/iam.serviceAccountUser
)を付与します。具体的には、プリンシパルにサービス アカウントに対するiam.serviceAccounts.actAs
権限が必要です。gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --member 'user:[email protected]' \ --role "roles/iam.serviceAccountUser"
上記のコマンドを使用すると、ユーザーはユーザー管理のサービス アカウントとして操作を実行できます。
サービス アカウント ユーザーのロールの詳細については、サービス アカウントの管理となりすましのロール: サービス アカウント ユーザーのロールをご覧ください。
ユーザー管理のサービス アカウントを使用するログシンクを作成する
gcloud
ユーザー管理のサービス アカウントでシンクを作成するには、変数を独自の情報に置き換え、gcloud logging sinks create
コマンドを --custom-writer-identity
フラグで実行します。
gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
API
Google Cloud プロジェクトにログシンクを作成するには、Logging API の projects.sinks.create を使用します。LogSink オブジェクトで、
customWriterIdentity
パラメータを渡します。メソッドのリクエストの本文に適切な値を指定します。name
: シンクの識別子。シンクを作成した後は、シンクの名前は変更できませんが、シンクを削除して新しいシンクを作成することはできます。destination
: ログをルーティングするログバケット。宛先のパスの形式は次のとおりです。logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
projects.sinks.create を呼び出してシンクを作成します。
Logging API を使用したシンクの作成の詳細については、LogSink のリファレンス ドキュメントをご覧ください。
シンクがログをルーティングすることを確認する
このセクションでは、gcloud CLI を使用してログエントリの書き込みと読み取りを行い、シンクがログを正しくルーティングしていることを確認します。
シンクがログを正しくルーティングしていることを確認するには、次のようにします。
変数を独自の情報に置き換え、
gcloud logging write
コマンドを使用してサンプル ログエントリを書き込みます。gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
上記のコマンドは、次のメッセージを返します。
Created log entry.
書き込んだログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read 'textPayload="Test log entry"' \ --bucket=BUCKET_NAME --location=LOCATION \ --view=_AllLogs --project=SINK_PROJECT_ID
次のステップ
サポートされている宛先にログをルーティングする方法については、サポートされている宛先にログをルーティングするをご覧ください。
Logging がログのルーティングと保存を行う方法の概要については、ルーティングとストレージの概要をご覧ください。
シンクを使用してログを転送する際に問題が発生した場合について、ルーティング ログのトラブルシューティングをご覧ください。
エクスポート先でルーティングされたログを表示する方法と、ログをフォーマットして整理する方法については、シンクの宛先でログを表示するをご覧ください。