このページでは、ユーザー管理のサービス アカウントで構成されたシンクを作成してログをルーティングする方法について説明します。デフォルトでは、Logging はリソース内のすべてのシンクに Logging サービス アカウントを使用します。ただし、ログシンクが別のプロジェクトにある場合、独自のユーザー管理サービス アカウントを作成して管理できます。これにより、ユーザー管理のサービス アカウントを含むプロジェクトから Identity and Access Management の権限を集中管理できます。
シンクの宛先がログバケットまたは Google Cloud プロジェクトの場合にのみ、ユーザー管理のサービス アカウントを使用するシンクを作成できます。このドキュメントの例では、宛先がログバケットであるユーザー管理のサービス アカウントを使用するシンクの設定方法を示します。
始める前に
Google Cloud CLI をインストールして構成します。
ユーザー管理のサービス アカウントがあることを確認し、次の変数をユーザー管理のサービス アカウントの適切な値に設定します。
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 の権限を借用できるようにします。デフォルトの Cloud Logging サービス アカウントは、ユーザー管理のサービス アカウントを使用するログシンクを作成する Google Cloud プロジェクトに存在します。
サービス アカウントの権限借用を構成するには、ユーザー管理のサービス アカウントの 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'
サービス アカウントの権限借用には、2 つのプリンシパルが関与します。リソースへのアクセス権がないサービス アカウントと、リソースへのアクセス権を持つ権限保持サービス アカウントです。この場合、ユーザー管理のサービス アカウントは、シンクの宛先(LOG_BUCKET_PROJECT_ID という名前のプロジェクト内のログバケット)にログエントリを書き込めるため、権限を持つアカウントです。Logging サービス アカウントには、ログをルーティングする権限があります。
サービス アカウント トークン作成者のロールの詳細については、サービス アカウントの管理となりすましのロール: サービス アカウント トークン作成者のロールをご覧ください。
サービス アカウントの権限借用の詳細については、サービス アカウントの権限借用についてをご覧ください。
プリンシパルがユーザー管理のサービス アカウントとしてオペレーションを実行できるようにする
シンクを作成するプリンシパルに、ユーザー管理のサービス アカウントとしてオペレーションを実行するために必要な権限を付与します。
必要な権限を付与するには、ユーザー管理のサービス アカウント CUSTOM_SA_PROJECT_ID を保存する Google Cloud プロジェクトで、サービス アカウント ユーザー ロール(roles/iam.serviceAccountUser
)をプリンシパルに付与します。
次のコマンドを実行する前に、次のように置き換えます。
- PRINCIPAL: ロールを付与するプリンシパルの識別子。通常、プリンシパル ID の形式は
PRINCIPAL-TYPE:ID
です。例:user:my-user@example.com
。PRINCIPAL
に使用できる形式の完全なリストについては、プリンシパル ID をご覧ください。
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 がログのルーティングと保存を行う方法の概要については、ルーティングとストレージの概要をご覧ください。
シンクを使用してログを転送する際に問題が発生した場合について、ルーティング ログのトラブルシューティングをご覧ください。
エクスポート先でルーティングされたログを表示する方法と、ログをフォーマットして整理する方法については、シンクの宛先でログを表示するをご覧ください。