このページでは、ユーザー管理のサービス アカウントで構成されたシンクを作成してログエントリを転送する方法について説明します。デフォルトでは、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 の権限を借用できるようにします。デフォルトの 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 がログエントリのルーティングと保存を行う方法の概要については、ルーティングとストレージの概要をご覧ください。
シンクを使用してログエントリを転送する際に問題が発生した場合は、ログの転送に関するトラブルシューティングをご覧ください。
宛先でログエントリを表示する方法と、ログエントリをフォーマットして整理する方法については、シンクの宛先でログを表示するをご覧ください。