ログバケットのログビューを構成する

このドキュメントでは、gcloud CLI を使用して Cloud Logging バケットのログビューを作成および管理する方法について説明します。ログビューを使用すると、ログバケット内のログにアクセスできるユーザーを高度かつ詳細に制御できます。

Logging ストレージ モデルの一般的な情報については、ルーティングとストレージの概要をご覧ください。

ログビューについて

ログビューを使用すると、ログバケットに保存されているログのサブセットに対してのみユーザーにアクセス権を付与できます。たとえば、一元管理されたプロジェクトに組織のログを保存するシナリオを考えてみます。ログバケットにログを提供するプロジェクトごとに 1 つのログビューを作成できます。その後、各ユーザーに 1 つ以上のログビューへのアクセス権を付与し、ユーザーが表示できるログを制限できます。

ログバケットごとに最大 30 個のログビューを作成できます。

ログビューへのアクセスを制御する

Cloud Logging は、IAM ポリシーを使用して、ログビューにアクセスできるユーザーを制御します。IAM ポリシーは、リソースレベル、プロジェクト レベル、フォルダレベル、組織レベルで存在できます。Cloud Logging では、ログビューごとに IAM ポリシーを作成できます。プリンシパルがアクションを実行する権限があるかどうかを判断するために、IAM は適用可能なすべてのポリシーを評価します。最初の評価はリソースレベルで行われます。

Google Cloud プロジェクトに対して roles/logging.viewAccessor のロールを持つプリンシパルは、プロジェクト内の任意のログバケットのビューとログにアクセスできます。

プリンシパルに特定のログビューへのアクセス権のみを付与するには、次のいずれかを行います。

  • ログビューの IAM ポリシーを作成し、そのポリシーに IAM バインディングを追加して、プリンシパルにログビューへのアクセス権を付与します。

    ログビューを大量に作成する場合は、この方法をおすすめします。

  • ログビューを含むプロジェクトに対する roles/logging.viewAccessor の IAM ロールをプリンシパルに付与します。ただし、IAM 条件をアタッチして、対象を特定ログビューに制限します。条件を省略すると、プリンシパルにすべてのログビューへのアクセス権が付与されます。Google Cloud プロジェクトのポリシー ファイルで、同じロールと同じプリンシパルを含むが条件式が異なるロール バインディングは 20 個までです。

詳細については、このドキュメントのログビューへのアクセス権を付与するをご覧ください。

自動作成されたログビュー

Cloud Logging は、すべてのログバケットの _AllLogs ビューと、_Default ログバケットの _Default ビューを自動的に作成します。

  • _AllLogs ビュー: ログバケット内のすべてのログを表示できます。
  • _Default ビュー: ログバケット内のデータアクセス以外のすべての監査ログを表示できます。

Cloud Logging によって自動的に作成されたビューは変更できませんが、_AllLogs ビューは削除できます。

ログビューのフィルタ

各ログビューには、ビューに表示されるログエントリを決定するフィルタが含まれています。フィルタには論理 AND 演算子と NOT 演算子を含めることができますが、論理 OR 演算子を含めることはできません。フィルタでは、次のいずれかの値を比較できます。

  • source 関数を使用するデータソース。 source 関数は、組織、フォルダ、Google Cloud プロジェクトの階層内にある特定のリソースのログエントリを返します。

  • log_id 関数を使用するログ ID。log_id 関数は、logName フィールドの指定された LOG_ID 引数に一致するログエントリを返します。

  • resource.type= FIELD_NAME 比較を使用した有効なリソースタイプ。

たとえば、次のフィルタは、myproject という名前の Google Cloud プロジェクトの Compute Engine stdout ログエントリをキャプチャします。

source("projects/myproject") AND resource.type = "gce_instance" AND log_id("stdout")

フィルタリング構文の詳細については、比較をご覧ください。

準備

ログビューを作成または更新する前に、次の手順を完了します。

  1. まだ作成していない場合は、適切な Google Cloud プロジェクトで、カスタムログビューを構成する Logging バケットを作成します。

  2. ログビューの作成と管理に必要な権限を取得し、ログビューへのアクセス権を付与するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼します。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  3. 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.

  4. ビューに表示するログを決定します。この情報を使用して、ログビューのフィルタを指定します。

  5. ログビューにアクセスできるユーザーと、ログビューの IAM ポリシーまたは Google Cloud プロジェクトにバインディングを追加するかどうかを決定します。詳細については、ログビューへのアクセスを制御するをご覧ください。

ログビューを作成する

ログビューを作成するには、gcloud logging views create コマンドを使用します。ログバケットごとに最大 30 個のログビューを作成できます。

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

  • VIEW_ID: ログビューの ID。
  • BUCKET_NAME: ログバケットの名前。
  • LOCATION:ログバケットのロケーション。
  • FILTER: ログビューを定義するフィルタ。空の場合は、すべてのログがログビューに含まれます。たとえば、Compute Engine VM インスタンスのログでフィルタするには、"resource.type=gce_instance" と入力します。
  • DESCRIPTION: ログビューの説明。たとえば、説明 "Compute logs" には次のように入力します。

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

Linux、macOS、Cloud Shell

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows(PowerShell)

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows(cmd.exe)

gcloud logging views create VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

このコマンドはレスポンスを提供しません。変更を確認するには、gcloud logging views list コマンドを実行します。

次に、プリンシパルにログビューへのアクセス権を付与します。

ログビューへのアクセス権を付与する

ユーザー定義ログバケットの特定のログビューにプリンシパルを制限するには、次の 2 つの方法があります。

  • ログビューの IAM ポリシー ファイルを使用できます。

  • ログバケットを保存する Google Cloud プロジェクトの IAM ポリシー ファイルと IAM 条件を使用できます。

大量のログビューを作成する場合は、ログビューの IAM ポリシー ファイルを使用してアクセスを制御することをおすすめします。

ログビュー: ロール バインディングを追加する

このセクションでは、ログビューの IAM ポリシー ファイルを使用して、そのログビューのログエントリにアクセスできるユーザーを制御する方法について説明します。この方法では、ログビューのポリシー ファイルにバインディングを追加します。このバインディングにより、指定されたプリンシパルにログビューへのアクセス権が付与されます。

このセクションでは、ログビューの IAM ポリシー ファイルに含まれるロール バインディングを一覧表示する方法についても説明します。

ログビューにロール バインディングを追加する

ログビューの IAM ポリシー ファイルを更新する手順は次のとおりです。

gcloud

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

  • VIEW_ID: ログビューの ID。
  • PRINCIPAL: ロールを付与するプリンシパルの識別子。通常、プリンシパル ID の形式は PRINCIPAL-TYPE:ID です。例: user:my-user@example.comPRINCIPAL が使用できる形式の一覧については、プリンシパル ID をご覧ください。
  • BUCKET_NAME: ログバケットの名前。
  • LOCATION:ログバケットのロケーション。

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

Linux、macOS、Cloud Shell

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

Windows(PowerShell)

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

Windows(cmd.exe)

gcloud logging views add-iam-policy-binding VIEW_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --bucket=BUCKET_NAME --location=LOCATION 

単一のバインディングが追加された場合のレスポンスを以下に示します。

Updated IAM policy for logging view [projects/PROJECT_ID/locations/global/buckets/BUCKET_NAME/views/VIEW_ID].
bindings:
- members:
  - PRINCIPAL
  role: roles/logging.viewAccessor
etag: BwYXfSd9-Gw=
version: 1

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。 詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。

Terraform を使用してログビューの IAM 関連付けをプロビジョニングするには、いくつかのリソースを使用できます。

  • google_logging_log_view_iam_policy
  • google_logging_log_view_iam_binding
  • google_logging_log_view_iam_member

詳細については、Cloud Logging LogView の IAM ポリシーをご覧ください。

Console

サポートされていません。ログビューにバインディングを追加するには、Google Cloud CLI を使用します。

ログビューのロール バインディングを一覧表示する

ログビューの IAM バインディングを一覧表示するには、次の操作を行います。

gcloud

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

  • VIEW_ID: ログビューの ID。
  • BUCKET_NAME: ログバケットの名前。
  • LOCATION:ログバケットのロケーション。

gcloud logging views get-iam-policy コマンドを実行します。

Linux、macOS、Cloud Shell

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

Windows(PowerShell)

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

Windows(cmd.exe)

gcloud logging views get-iam-policy VIEW_ID --bucket=BUCKET_NAME --location=LOCATION 

ログビューにバインディングが含まれていない場合、レスポンスには etag フィールドのみが含まれます。ログビューに単一のバインディングが含まれている場合のレスポンスを以下に示します。

bindings:
- members:
  - PRINCIPAL
  role: roles/logging.viewAccessor
etag: BwYXfSd9-Gw=
version: 1

Terraform

Terraform を使用してログビューの IAM 関連付けを一覧表示するには、データソース google_logging_log_view_iam_policy を使用します。

Console

サポートされていません。ログビューのバインディングを一覧表示するには、Google Cloud CLI を使用します。

Google Cloud プロジェクト: ロール バインディングを追加する

このセクションでは、Google Cloud プロジェクトにロール バインディングを追加する方法と、プロジェクトに適用されているバインディングを一覧表示する方法について説明します。この方法を使用する場合、特定のログビューに保存されているログエントリへのアクセスをプリンシパルに制限するには、付与に IAM 条件を追加する必要があります。

プロジェクトにロール バインディングを追加する

Google Cloud プロジェクトの IAM ポリシー ファイルにロール バインディングを追加するには、次の操作を行います。

gcloud

  1. 条件を含む JSON または YAML ファイルを作成します。

    たとえば、次の内容の condition.yaml という名前のファイルを作成します。

    expression: "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
    title: "My title"
    description: "My description"
    
  2. 省略可: JSON ファイルまたは YAML ファイルの形式が正しいことを確認するには、次のコマンドを実行します。

    gcloud alpha iam policies lint-condition --condition-from-file=condition.yaml
    
  3. gcloud projects add-iam-policy-binding メソッドを呼び出して、Google Cloud プロジェクトの IAM ポリシーを更新します。

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

    • PROJECT_ID: プロジェクトの ID。
    • PRINCIPAL: ロールを付与するプリンシパルの識別子。通常、プリンシパル ID の形式は PRINCIPAL-TYPE:ID です。例: user:my-user@example.comPRINCIPAL が使用できる形式の一覧については、プリンシパル ID をご覧ください。

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

    gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role='roles/logging.viewAccessor' --condition-from-file=condition.yaml
    

    上記のコマンドのレスポンスには、すべてのロール バインディングが含まれます。

    - condition:
        description: My description
        expression: resource.name == "projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID"
        title: My title
      members:
      - PRINCIPAL
      role: roles/logging.viewAccessor
    

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。 詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。

Terraform を使用してプロジェクトの IAM 関連付けをプロビジョニングするには、いくつかのリソースを使用できます。

  • google_project_iam_policy
  • google_project_iam_binding
  • google_project_iam_member

詳細については、プロジェクトの IAM ポリシーをご覧ください。

Console

ログバケットを作成したプロジェクトで、次の操作を行います。

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

    [IAM] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。

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

  3. [新しいプリンシパル] 項目に、ユーザーのメール アカウントを追加します。

  4. [ロールを選択] プルダウン メニューで [ログビュー アクセサー] を選択します。

    このロールは、すべてのビューに対する読み取りアクセス権をユーザーに付与します。ユーザーによる特定のビューへのアクセスを制限するには、リソース名に基づいて条件を追加します。

    1. [IAM の条件を追加] をクリックします。

    2. 条件の [タイトル] と [説明] を入力します。

    3. [条件タイプ] のプルダウン メニューで、[リソース] > [名前] を選択します。

    4. [Operator] プルダウン メニューで [=] を選択します。

    5. [] フィールドに、ビューへのフルパスを含む、ログビューの ID を入力します。

      次に例を示します。

      projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID
    6. [保存] をクリックして、条件を追加します。

  5. [保存] をクリックして、権限を設定します。

プロジェクトのロール バインディングを一覧表示する

Google Cloud プロジェクトのロール バインディングを一覧表示するには、次の操作を行います。

gcloud

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

  • PROJECT_ID: プロジェクトの ID。

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

gcloud projects get-iam-policy PROJECT_ID

上記のコマンドのレスポンスには、すべてのロール バインディングが含まれます。

- condition:
    description: My description
    expression: resource.name == "projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID"
    title: My title
  members:
  - PRINCIPAL
  role: roles/logging.viewAccessor

Terraform

Terraform を使用してプロジェクトの IAM 関連付けを一覧表示するには、データソース google_project_iam_policy を使用します。

Console

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

[IAM] に移動

検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。

[IAM] ページには、すべてのプリンシパル、その IAM ロール、およびそれらのロールに関連付けられている条件が一覧表示されます。

ログバケットのログビューを一覧表示する

ログバケット用に作成されたログビューを一覧表示するには、gcloud logging views list コマンドを使用します。

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

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

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

Linux、macOS、Cloud Shell

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

Windows(PowerShell)

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

Windows(cmd.exe)

gcloud logging views list --bucket=BUCKET_NAME --location=LOCATION

レスポンス データはログビューのリストです。ログビューごとに、フィルタ、作成日、最終更新日が表示されます。作成日と更新日が空の場合、ログビューは Google Cloud プロジェクトの作成時に作成されました。次の出力例は、クエリが実行されたログバケット上に 2 つのビュー ID(_AllLogscompute)があることを示しています。

VIEW_ID: _AllLogs
FILTER:
CREATE_TIME:
UPDATE_TIME:

VIEW_ID: compute
FILTER: resource.type="gce_instance"
CREATE_TIME: 2024-02-20T17:41:17.405162921Z
UPDATE_TIME: 2024-02-20T17:41:17.405162921Z

ログビューを更新する

ログビューを更新または変更するには、gcloud logging views update コマンドを使用します。ビュー ID がわからない場合は、ログビューを一覧表示するをご覧ください。

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

  • VIEW_ID: ログビューの ID。
  • BUCKET_NAME: ログバケットの名前。
  • LOCATION:ログバケットのロケーション。
  • FILTER: ログビューを定義するフィルタ。空の場合は、すべてのログがログビューに含まれます。たとえば、Compute Engine VM インスタンスのログでフィルタするには、"resource.type=gce_instance" と入力します。
  • DESCRIPTION: ログビューの説明。たとえば、説明 "New description for the log view" には次のように入力します。

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

Linux、macOS、Cloud Shell

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows(PowerShell)

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

Windows(cmd.exe)

gcloud logging views update VIEW_ID --bucket=BUCKET_NAME --location=LOCATION --log-filter=FILTER --description=DESCRIPTION

このコマンドはレスポンスを提供しません。変更を確認するには、gcloud logging views describe コマンドを実行します。

ログビューを削除する

作成したログビューが不要になった場合は、削除できます。ただし、ログビューを削除する前に、ログビューが保存したクエリなどの別のリソースによって参照されていないことを確認することをおすすめします。

_Default ログバケットの _Default ログビューは削除できません。

ログバケットを削除する方法は次のとおりです。

  1. 推奨: Google Cloud プロジェクトを確認して、ログビューが参照されていないことを確認します。次の点を確認することをおすすめします。

    • 保存または共有された [ログ エクスプローラ] ページまたは [ログ分析] ページから実行されるクエリ。
    • カスタム ダッシュボード
  2. gcloud logging views delete コマンドを使用します。 ビュー ID がわからない場合は、ログビューを一覧表示するをご覧ください。

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

    • VIEW_ID: ログビューの ID。
    • BUCKET_NAME: ログバケットの名前。
    • LOCATION:ログバケットのロケーション。

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

    Linux、macOS、Cloud Shell

    gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

    Windows(PowerShell)

    gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

    Windows(cmd.exe)

    gcloud logging views delete VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

    レスポンスで削除が確認されます。たとえば、tester という名前のログビューを削除した場合のレスポンスは次のようになります。

    Deleted [tester].
    

ログビューについて説明する

ログビューの詳細情報を取得するには、gcloud logging views describe コマンドを使用します。ビュー ID がわからない場合は、ログビューを一覧表示するをご覧ください。

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

  • VIEW_ID: ログビューの ID。
  • BUCKET_NAME: ログバケットの名前。
  • LOCATION:ログバケットのロケーション。

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

Linux、macOS、Cloud Shell

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows(PowerShell)

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

Windows(cmd.exe)

gcloud logging views describe VIEW_ID --bucket=BUCKET_NAME --location=LOCATION

レスポンスには、ログビューの説明と完全修飾名が常に含まれます。フィルタ フィールドが空でない場合、フィルタも含まれます。レスポンスの例を次に示します。

createTime: '2024-02-20T17:41:17.405162921Z'
filter: resource.type="gce_instance"
name: projects/my-project/locations/global/buckets/my-bucket/views/compute
updateTime: '2024-02-20T17:41:17.405162921Z'

ログビューに関連付けられたログの表示

ログビューでログを表示するには、ログビューの ログビュー アクセサー(roles/logging.viewAccessorロールがあることを確認します。

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

    [ログ エクスプローラ] に移動

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

  2. ツールバーで [スコープを絞り込む]、[ログビュー] の順にクリックし、ログビューを選択します。

詳細については、ログ エクスプローラのドキュメントをご覧ください。

次のステップ

ログエントリ内の特定のフィールドへのアクセスを制御する方法については、フィールド レベルのアクセスを構成するをご覧ください。