組織レベルとフォルダレベルのログを照合してサポートされている宛先に転送する

このドキュメントでは、集約されたシンクを作成する方法について説明します。集約シンクを使用すると、組織またはフォルダ内の Google Cloud リソースによって生成されたログを組み合わせて、一元化されたロケーションにルーティングできます。

始める前に

シンクを作成する前に、次のことを確認します。

  • 集約シンクの動作を把握している。これらのシンクの詳細については、集約シンクの概要をご覧ください。

  • ログ エクスプローラに表示できるログエントリを含む Google Cloud フォルダまたは組織がある。

  • ログのルーティング元のGoogle Cloud の組織またはフォルダに対して、次のいずれかの IAM ロールを付与されている。

    • オーナーroles/owner
    • Logging 管理者roles/logging.admin
    • ログ構成書き込みroles/logging.configWriter

    これらのロールに含まれる権限を使用して、シンクの作成、削除、変更ができます。IAM ロールの設定については、Logging のアクセス制御ガイドをご覧ください。

  • 集約シンクの宛先が存在する、または作成できる。

    宛先が Google Cloud プロジェクトの場合、プロジェクトは任意の組織に配置できます。他のすべての宛先は、任意の組織の任意のプロジェクトに配置できます。

  • Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    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.

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

集約シンクを作成する

集約シンクを構成するには、シンクを作成し、宛先への書き込み権限をシンクに付与します。このセクションでは、集約シンクの作成方法について説明します。シンクに権限を付与する方法については、このページの宛先の権限を設定するをご覧ください。

フォルダまたは組織ごとに最大 200 個のシンクを作成できます。

コンソール

フォルダまたは組織の集約シンクを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[ログルーター] ページに移動します。

    [ログルーター] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. 既存のフォルダまたは組織を選択します。

  3. [シンクを作成] を選択します。

  4. [シンクの詳細] パネルで、次の詳細を入力します。

    • シンクの名前: シンクの識別子を指定します。シンクを作成した後はシンク名を変更できませんが、シンクを削除して新しいシンクを作成することはできます。

    • シンクの説明(省略可): シンクの目的またはユースケースについて説明を入力します。

  5. [シンクサービスの選択] メニューで宛先のタイプを選択し、宛先を指定します。既存のリンク先を選択することも、リンク先を作成することもできます。

    • インターセプト シンクの場合は、Google Cloud プロジェクトを選択して宛先 Google Cloud プロジェクトの完全修飾名を入力します。

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID
      
    • 非インターセプト シンクの場合は、宛先を選択して宛先の完全修飾名を入力します。次の宛先がサポートされています。

      • Google Cloud プロジェクト

        logging.googleapis.com/projects/DESTINATION_PROJECT_ID
        
      • Cloud Logging バケット

        logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
        
      • Cloud Storage バケット

        storage.googleapis.com/BUCKET_NAME
        
      • Pub/Sub トピック

        pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
        
      • Splunk

        Splunk サービスの Pub/Sub トピックを入力します。

  6. [シンクに含めるログの選択] パネルで、シンクに含めるリソースを選択します。

    • インターセプト シンクの場合は、[Intercept logs ingested by this organization and all child resources] を選択します。

    • 非インターセプト シンクの場合は、[Include logs ingested by this resource and all child resources] を選択します。

  7. [包含フィルタの作成] フィールドに、含めるログエントリに一致するフィルタ式を入力します。フィルタを設定しない場合は、選択したリソースのすべてのログエントリが宛先にルーティングされます。

    たとえば、すべてのデータアクセスの監査 ログを 1 つの Logging バケットにルーティングするようにフィルタを作成できます。このフィルタは次のようになります。

    LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
    

    フィルタの例については、このページの集約シンクのフィルタを作成するをご覧ください。

    フィルタの長さは 20,000 文字までです。

  8. (省略可)正しいフィルタを入力したことを確認するには、[ログをプレビュー] を選択します。これにより、フィルタが事前に入力された状態で、ログ エクスプローラが新しいタブで開きます。

  9. (省略可)[シンクから除外するログを選択] パネルで、次の操作を行います。

    1. [除外フィルタ名] フィールドに名前を入力します。

    2. [除外フィルタの作成] セクションで、除外するログエントリに一致するフィルタ式を入力します。sample 関数を使用して、除外するログエントリの一部を選択することもできます。

      たとえば、特定のプロジェクトのログエントリを宛先にルーティングしない場合は、次の除外フィルタを追加します。

      logName:projects/PROJECT_ID
      

      複数のプロジェクトからログエントリを除外するには、論理 OR 演算子を使用して logName 句を結合します。

    シンクごとに最大 50 個の除外フィルタを作成できます。フィルタの長さは 20,000 文字までです。

  10. [シンクを作成] を選択します。

  11. 集約シンクの構成を完了するには、シンクのサービス アカウントに、シンクの宛先にログエントリを書き込む権限を付与します。詳細については、宛先の権限を設定するをご覧ください。

gcloud

集約シンクを作成するには、logging sinks create コマンドを使用します。

  1. シンクを作成するには、gcloud logging sinks create コマンドを呼び出し、--include-children オプションを含めます。

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

    • SINK_NAME: ログシンクの名前。シンクの作成後に名前を変更することはできません。
    • SINK_DESTINATION: ログエントリのルーティング先となるサービスまたはプロジェクト。これらの宛先の形式については、宛先パスの形式をご覧ください。
    • INCLUSION_FILTER: シンクの包含フィルタ。フィルタの例については、集約シンク用のフィルタを作成するをご覧ください。
    • FOLDER_ID: フォルダの ID。シンクを組織レベルで作成する場合は、--folder=FOLDER_ID-- organization=ORGANIZATION_ID に置き換えます。

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

    gcloud logging sinks create SINK_NAME \
      SINK_DESTINATION  --include-children \
      --folder=FOLDER_ID --log-filter="INCLUSION_FILTER"
    

    次のオプションも指定できます。

    • インターセプト シンクを作成するには、--intercept-children オプションを含めます。

    たとえば、フォルダレベルで集約シンクを作成し、宛先が Pub/Sub トピックの場合は、コマンドは次のようになります。

    gcloud logging sinks create SINK_NAME \
      pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID --include-children \
      --folder=FOLDER_ID --log-filter="logName:activity"
  2. シンクのシ宛先への書き込み権限をシンクのサービス アカウントに付与します。詳細については、宛先の権限を設定するをご覧ください。

REST

集約シンクを作成するには、Logging API メソッド organizations.sinks.create または folders.sinks.create を使用します。次のように、メソッドの引数を準備します。

  1. parent フィールドを、シンクを作成する Google Cloud 組織またはフォルダに設定します。親は次のいずれかにする必要があります。

    • organizations/ORGANIZATION_ID
    • folders/FOLDER_ID
  2. メソッドのリクエスト本文の LogSink オブジェクトで、次のいずれかを行います。

    • includeChildrenTrue に設定します。

    • インターセプト シンクを作成するには、interceptChildren フィールドを True に設定します。

  3. 含めるログエントリに一致するように filter フィールドを設定します。

    フィルタの例については、集約シンク用のフィルタを作成するをご覧ください。

    フィルタの長さは 20,000 文字以下にする必要があります。

  4. 残りの LogSink フィールドを他のシンクの場合と同様に設定します。 詳細については、サポートされている宛先にログをルーティングするをご覧ください。

  5. organizations.sinks.create または folders.sinks.create を呼び出してシンクを作成します。

  6. シンクのシ宛先への書き込み権限をシンクのサービス アカウントに付与します。詳細については、宛先の権限を設定するをご覧ください。

シンクに加えたどの変更も、適用されるまで数分かかることがあります。

集約シンクのフィルタ

このセクションでは、集約シンクで使用できるフィルタの例について説明します。その他の例については、ログ エクスプローラを使用したサンプルクエリをご覧ください。

一部の例で次の表記を使用しています。

  • : は部分文字列演算子です。= 演算子を代わりに使用しないでください。
  • ... はさらにフィルタ比較が続くことを表します。
  • 変数は色付きのテキストで示されます。これらは有効な値に置き換えてください。

フィルタの長さは 20,000 文字に制限されています。

フィルタリング構文の詳細については、Logging のクエリ言語をご覧ください。

ログソースを選択する

シンクがすべての子リソースからログエントリをルーティングするには、シンクの包含フィルタと除外フィルタでプロジェクト、フォルダ、または組織を指定しないでください。たとえば、次のようなフィルタを使用して組織の集約シンクを構成するとします。

resource.type="gce_instance"

前述のフィルタでは、その組織の子に書き込まれたリソースタイプの Compute Engine インスタンスのログエントリが、集約シンクによって宛先にルーティングされます。

しかし、集約シンクを使用して特定の子リソースからのログエントリのみをルーティングしたい場合もありえます。たとえば、コンプライアンス上の理由から、特定のフォルダやプロジェクトの監査ログを、自身の Cloud Storage バケットに格納したい場合などです。このような状況では、包含フィルタを構成して、ログエントリをルーティング対象とする子リソースを指定します。フォルダとそのフォルダ内のすべてのプロジェクトからログエントリをルーティングする場合、フィルタでフォルダとそのフォルダに含まれる各プロジェクトの一覧を表示し、さらにステートメントを OR 句で結合する必要があります。

次のフィルタは、ログエントリを特定の Google Cloud プロジェクト、フォルダ、組織に制限します。

logName:"projects/PROJECT_ID/logs/" AND ... 
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ... 
logName:"folders/FOLDER_ID/logs/" AND ... 
logName:"organizations/ORGANIZATION_ID/logs/" AND ... 

たとえば、フォルダ my-folder に書き込まれた Compute Engine インスタンスに書き込まれたログエントリのみをルーティングするには、次のフィルタを使用します。

logName:"folders/my-folder/logs/" AND resource.type="gce_instance"

前述のフィルタでは、my-folder 以外のリソースに書き込まれたログエントリ(my-folder の子である Google Cloud プロジェクトに書き込まれたログエントリを含む)は、宛先にルーティングされません。

モニタリング対象リソースを選択する

Google Cloud プロジェクトの特定のモニタリング対象リソースだけからログエントリをルーティングするには、複数の比較演算子を使用してリソースを厳密に指定します。

logName:"projects/PROJECT_ID/logs" AND
resource.type=RESOURCE_TYPE AND
resource.labels.instance_id=INSTANCE_ID

リソースタイプの一覧については、モニタリング対象リソースタイプをご覧ください。

ログエントリのサンプルを選択する

ログエントリのランダムなサンプルをルーティングするには、sample 組み込み関数を追加します。たとえば、現在のフィルタに一致するログエントリの 10% だけをルーティングするには、次の記述を追加します。

sample(insertId, 0.10) AND ...

詳細については、sample 関数をご覧ください。

Cloud Logging のフィルタの詳細については、Logging のクエリ言語をご覧ください。

宛先の権限を設定する

このセクションでは、シンクの宛先にログエントリを書き込むための Identity and Access Management 権限を Logging に付与する方法について説明します。Logging のロールと権限の完全なリストについては、アクセス制御をご覧ください。

ログエントリを現在のプロジェクトのログバケット以外の宛先にルーティングするシンクを作成または更新する場合は、そのシンクのサービス アカウントが必要です。Logging は、サービス アカウントを自動的に作成して管理します。

  • 2023 年 5 月 22 日以降、シンクを作成し、基盤となるリソースのサービス アカウントが存在しない場合は、Logging によってサービス アカウントが作成されます。Logging では、基盤となるリソース内のすべてのシンクに同じサービス アカウントが使用されます。リソースには、 Google Cloud プロジェクト、組織、フォルダ、請求先アカウントがあります。
  • 2023 年 5 月 22 日より前には、Logging は各シンクのサービス アカウントを作成していました。2023 年 5 月 22 日現在、Logging では基盤となるリソース内のすべてのシンクに共有サービス アカウントを使用しています。

シンクの書き込み ID は、そのシンクに関連付けられているサービス アカウントの ID です。現在の Google Cloud プロジェクトのログバケットに書き込むシンクを除き、すべてのシンクには書き込み ID があります。書き込み ID のメールアドレスは、宛先にデータを書き込むためにアクセス権が必要なプリンシパルを識別します。

サービス境界で保護されたリソースにログエントリをルーティングするには、シンクのサービス アカウントにアクセスレベルを追加し、宛先サービス境界に割り当てる必要があります。この操作は、集約されていないシンクには必要ありません。詳細については、VPC Service Controls: Cloud Logging をご覧ください。

シンクをエクスポート先にルーティングするための権限を設定するには、次の手順を行います。

コンソール

  1. シンクのサービス アカウントに関する情報を取得する手順は次のとおりです。

    1. Google Cloud コンソールで、[ログルーター] ページに移動します。

      [ログルーター] に移動

      検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

    2. [メニュー]、[シンクの詳細を表示] の順に選択します。[シンクの詳細] パネルに書き込み ID が表示されます。

    3. writerIdentity フィールドの値にメールアドレスが含まれている場合は、次のステップに進みます。値が None の場合、宛先の権限を構成する必要はありません。

    4. シンクの書き込み ID をクリップボードにコピーします。次に示すのは、書き込み ID です。

      serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
      
  2. シンクの書き込み ID で指定されたプリンシパルに、ログデータをエクスポート先に書き込む権限を付与します。

    1. Google Cloud コンソールで [IAM] ページに移動します。

      [IAM] に移動

      このページを検索バーで検索する場合は、小見出しが「IAM と管理」の結果を選択します。

    2. Google Cloud コンソールのツールバーで、集約シンクの宛先を保存するプロジェクトを選択します。宛先がプロジェクトの場合は、そのプロジェクトを選択します。

    3. [アクセスを許可] をクリックします。

    4. シンクの書き込み ID で指定されたプリンシパルを入力し、IAM ロールを付与します。

gcloud

  1. 宛先を含むGoogle Cloud プロジェクトに対するオーナー権限があることを確認します。シンクの宛先に対するオーナー権限がない場合は、書き込み ID をプリンシパルとして追加するようプロジェクト オーナーに依頼します。

  2. シンクのサービス アカウントに関する情報を取得するには、gcloud logging sinks describe メソッドを呼び出します。

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

    • SINK_NAME: ログシンクの名前。シンクの作成後に名前を変更することはできません。

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

    gcloud logging sinks describe SINK_NAME
    
  3. シンクの詳細に writerIdentity というラベルのフィールドが含まれている場合は、次のステップに進みます。詳細に writerIdentity フィールドが含まれていない場合、シンクの宛先権限を構成する必要はありません。

  4. シンクの書き込み ID をクリップボードにコピーします。次に示すのは、書き込み ID です。

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  5. gcloud projects add-iam-policy-binding コマンドを呼び出して、エクスポート先にログデータを書き込む権限をシンクの書き込み ID に付与します。

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

    • PROJECT_ID: プロジェクトの ID。集約シンクの宛先を保存するプロジェクトを選択します。宛先がプロジェクトの場合は、そのプロジェクトを選択します。
    • PRINCIPAL: ロールを付与するプリンシパルの ID。通常、プリンシパル ID の形式は PRINCIPAL-TYPE:ID です。例: user:my-user@example.com PRINCIPAL に使用できる形式の一覧については、プリンシパル ID をご覧ください。
    • ROLE: IAM ロール。ログシンクの宛先に基づいて、シンクの書き込み ID に IAM ロールを付与します。

    gcloud projects add-iam-policy-binding コマンドを実行します。

    gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE
    

REST

サービス アカウントにロールを付与する場合は、 Google Cloud コンソールまたは Google Cloud CLI を使用することをおすすめします。

次のステップ