ユーザー管理のサービス アカウントでログシンクを構成する

このページでは、ユーザー管理のサービス アカウントで構成されたシンクを作成してログをルーティングする方法について説明します。デフォルトでは、Logging はリソース内のすべてのシンクに Logging サービス アカウントを使用します。ただし、ログシンクが別のプロジェクトにある場合、独自のユーザー管理サービス アカウントを作成して管理できます。これにより、ユーザー管理のサービス アカウントを含むプロジェクトから Identity and Access Management の権限を集中管理できます。

シンクの宛先がログバケットまたは Google Cloud プロジェクトの場合にのみ、ユーザー管理のサービス アカウントを使用するシンクを作成できます。このドキュメントの例では、宛先がログバケットであるユーザー管理のサービス アカウントを使用するシンクの設定方法を示します。

始める前に

  1. Google Cloud CLI をインストールして構成します。

  2. ユーザー管理のサービス アカウントがあることを確認し、次の変数をユーザー管理のサービス アカウントの適切な値に設定します。

    • CUSTOM_SA_PROJECT_ID: ユーザー管理のサービス アカウントを含むプロジェクトのプロジェクト ID。

    • CUSTOM_SA: ユーザー管理のサービス アカウントのメールアドレス。

    サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。

  3. ログシンクの宛先として機能するログバケットがあることを確認し、次の変数をログバケットに適した値に設定します。必要に応じて、ログバケットを作成します。

    • LOG_BUCKET_PROJECT_ID: ログバケットを含むプロジェクトのプロジェクト ID。

    • LOCATION: ログバケットのロケーション。

    • BUCKET_NAME: ログバケットの名前。

  4. ログシンクを作成する予定のプロジェクトに存在する Logging サービス アカウントの名前を特定し、次の変数を適切な値に設定します。

    • SINK_PROJECT_ID: ログシンクを作成するように計画しているプロジェクトのプロジェクト ID。

    • LOGGING_SA: デフォルトの Logging サービス アカウントのメールアドレス。このアドレスを取得するには、次のコマンドを実行します。

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      レスポンスの loggingServiceAccountId で始まる行に、サービス アカウントのメールアドレスが一覧表示されます。

  5. ユーザー管理のサービス アカウントを含むプロジェクトで、組織のポリシーのブール型制約 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.comPRINCIPAL に使用できる形式の完全なリストについては、プリンシパル 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 を使用してログエントリの書き込みと読み取りを行い、シンクがログを正しくルーティングしていることを確認します。

シンクがログを正しくルーティングしていることを確認するには、次のようにします。

  1. gcloud logging write コマンドを実行します。

    次のコマンドを実行する前に、次のように置き換えます。

    • LOG_NAME: ログの名前です。たとえば、このフィールドを mylog に設定できます。

    gcloud logging write コマンドを実行します。

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    上記のコマンドから、Created log entry. というメッセージが返されます。

  2. 先ほど書き込んだログエントリを読み取るには、次のコマンドを実行します。

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

次のステップ