組織のログを集約して保存する

このドキュメントでは、非インターセプト集約シンクを使用して、Google Cloud 組織に含まれるリソースによって生成されたログエンティティを管理する方法について説明します。

子リソースのシンクでどのログをクエリできるか、またはシンクを介してルーティングできるログエンティティかを制御するかに応じて、集約シンクをインターセプトする、またはインターセプトしない構成にできます。このチュートリアルでは、組織の監査ログを Google Cloud プロジェクトに転送し、集約された監査ログをログバケットに転送する集約シンクを作成します。

集約シンクについて詳しくは、組織レベルとフォルダレベルのログを照合してサポートされている宛先に転送するをご覧ください。

このチュートリアルでは、次の手順を行います。

  1. まず、集約されたログエンティティを保存する Google Cloud プロジェクトにログバケットとログシンクを作成します。

  2. 次に、組織レベルで非インターセプト集約シンクを作成し、ログエントリをログバケットを含む Google Cloud プロジェクトに転送します。

  3. 次に、新しいログバケットのログビューへの読み取りアクセスを構成します。

  4. 最後に、[ログ エクスプローラ] ページからログエントリをクエリして表示します。

始める前に

次のことをご確認ください。

  • 集約シンクの構成に必要な権限を取得するには、組織に対する次の IAM ロールを付与するよう管理者に依頼してください。

    • プロジェクトにログバケットとシンクを作成するには: ログ構成書き込み(roles/logging.configWriter)- プロジェクト
    • 集約シンクを作成するには: ログ構成書き込み(roles/logging.configWriter)- 組織
    • プリンシパルにロールを付与するには: オーナー(roles/owner)- プロジェクト

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

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

  • VPC Service Controls を使用している場合は、サービス境界に上り(内向き)ルールを追加する必要があります。VPC Service Controls の制限事項の詳細については、集約シンクと VPC Service Controls の制限事項をご覧ください。
  • 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.

ログバケットの作成

ログバケットには、他の Google Cloud プロジェクト、フォルダ、組織から転送されたログエントリが保存されます。詳細については、ログバケットを構成するをご覧ください。

ログエンティティを集約する Google Cloud プロジェクトでバケットを作成するには、次の手順を行います。

  1. シェルを開きます。

    たとえば、Cloud Shell を使用するには、次の操作を行います。

    1. Google Cloud コンソールに移動します。

      Google Cloud コンソールに移動

    2. ツールバーで [Cloud Shell をアクティブにする] をクリックします。
  2. シェルで gcloud logging buckets create コマンドを実行します。

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

    • BUCKET_NAME: ログバケットの名前。
    • LOCATION:ログバケットのロケーション。 ログバケットを作成した後に、そのロケーションを変更することはできません。
    • PROJECT_ID: ログバケットを作成するプロジェクトの ID。

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

     gcloud logging buckets create BUCKET_NAME \
       --location=LOCATION --project=PROJECT_ID
    
  3. ログバケットが作成されたことを確認します。

    gcloud logging buckets list --project=PROJECT_ID
    

    このコマンドのレスポンスは、プロジェクト内のログバケットのリストです。

  4. ログバケットには、構成可能な保持期間があります。ログバケット内のログエントリの保持期間を設定するには、gcloud logging buckets update コマンドを使用します。たとえば、次のコマンドは、ログバケットに保存されているログエントリの保持期間を 365 日間に延長します。

    gcloud logging buckets update BUCKET_NAME \
       --location=LOCATION --project=PROJECT_ID \
       --retention-days=365
    

    オプションの詳細については、gcloud logging buckets update をご覧ください。

プロジェクト レベルのログシンクを作成する

シンクを作成して、ログエントリをログバケットに転送します。シンクには、包含フィルタ、除外フィルタ、宛先が含まれます。このチュートリアルでは、包含フィルタと宛先を新しいログバケットに構成します。シンクに除外フィルタが含まれていません。シンクの詳細については、サポートされている宛先にログを転送するをご覧ください。

作成したログバケットにログエントリを転送するシンクを作成するには、gcloud logging sinks create コマンドを実行します。

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

  • PROJECT_LEVEL_SINK_NAME: プロジェクト レベルのログシンクの名前。
  • SINK_DESTINATION: ログエントリがルーティングされるログバケット。ログバケットの宛先パスの形式は次のとおりです。

    logging.googleapis.com/projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
    
  • PROJECT_ID: ログシンクを作成するプロジェクトの ID。このオプションは、ログバケットを作成したのと同じプロジェクトに設定します。

  • 次のオプションを含めます。

    • --log-filter: このオプションを使用して、シンクに含めるログエントリに一致するフィルタを設定します。このチュートリアルでは、すべての監査ログエントリを選択するようにフィルタが設定されています。フィルタを設定しない場合、Google Cloud プロジェクトからのログエンティティはすべて宛先に転送されます。
    • --description: このオプションは、シンクの目的またはユースケースを説明するために使用します。

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

gcloud logging sinks create PROJECT_LEVEL_SINK_NAME SINK_DESTINATION
--project=PROJECT_ID
--log-filter='logName:cloudaudit.googleapis.com' \
--description="Audit logs from my organization" \

集約シンクを作成する

集約シンクは、組織またはフォルダに含まれるリソースのログを組み合わせて、宛先に転送します。

このチュートリアルでは、インターセプトしない集約シンクを作成します。つまり、集約シンクによって転送されるすべてのログエントリは、ログエントリの発生元のリソースのシンクによっても転送されます。たとえば、プロジェクトで発生した監査ログは、集約シンクとそのプロジェクト内のシンクによって転送されます。そのため、ログエントリの複数のコピーを保存できます。

インターセプトするシンクを作成できます。詳細については、組織レベルとフォルダレベルのログを照合してサポート宛先に転送するをご覧ください。

組織レベルでシンクを設定する

インターセプトせず、ログエントリをプロジェクトに転送する集約シンクを作成するには、次の手順を行います。

  1. gcloud logging sinks createコマンドを実行する

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

    • SINK_NAME: ログシンクの名前。シンクの作成後に名前を変更することはできません。
    • PROJECT_ID: ログバケットを保存するプロジェクトの ID。
    • ORGANIZATION_ID: 組織の ID。

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

    gcloud logging sinks create SINK_NAME \
    logging.googleapis.com/projects/PROJECT_ID  \
      --log-filter='logName:cloudaudit.googleapis.com' \
      --description="Audit logs from my organization" \
      --organization=ORGANIZATION_ID \
      --include-children
    

    --include-children オプションは重要です。このオプションを使用すると、組織内のすべての Google Cloud プロジェクトとフォルダのログエントリがルーティングされます。詳細については、組織レベルのログをサポートされている宛先に照合して転送するをご覧ください。

  2. シンクが作成されたことを確認します。

    gcloud logging sinks list --organization=ORGANIZATION_ID
    
  3. サービス アカウントの名前を取得します。

    gcloud logging sinks describe SINK_NAME --organization=ORGANIZATION_ID
    

    出力は次のようになります。

    writerIdentity: serviceAccount:o1234567890-ORGANIZATION_ID@gcp-sa-logging.iam.gserviceaccount.com
    
  4. serviceAccount フィールドの値をクリップボードにコピーします。

シンクにアクセス権を付与する

集約シンクを作成したら、シンクが宛先として設定したプロジェクトにログエントリを書き込む権限を付与する必要があります。権限を付与するには、宛先権限の設定の説明に沿って、Google Cloud コンソールを使用するか、Identity and Access Management(IAM)ポリシーを編集します。

ログエントリの書き込み権限をシンクに付与するには、次の操作を行います。

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

    [IAM] に移動

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

  2. ログバケットを含む Google Cloud プロジェクトを選択します。

  3. [ アクセスを許可] をクリックし、サービス アカウントを新しいプリンシパルとして追加します。serviceAccount: 接頭辞は含めないでください。

  4. [ロールを選択] メニューで [ログ書き込み] を選択します。

  5. [保存] をクリックします。

シンク検証に役立つログエントリを生成する

集約シンクが正しく構成されていることを確認するには、次の手順を行います。

  1. ログバケットに転送する必要がある監査ログエントリを生成します。

    • 組織内に多数の Google Cloud プロジェクトがある場合は、監査ログのトラフィックが十分にあるため、検証目的で作成する必要がない場合があります。次のステップに進みます。

    • それ以外の場合は、別のプロジェクトに移動して Compute Engine VM インスタンスを作成し、作成したインスタンスを削除します。監査ログは、VM の作成、起動、削除時に書き込まれます。

  2. [ログ エクスプローラ] ページでログを表示するというタイトルのセクションの手順に沿って、監査ログを表示します。_AllLogs ビューを選択してください。

ログバケットのログビューへの読み取りアクセスを構成する

ログバケットを作成すると、Cloud Logging によって _AllLogs という名前のログビューが自動的に作成されます。 このビューには、ログバケットに保存されているすべてのログエントリが含まれます。

プリンシパルが特定のログエントリにのみアクセスできるように制限するには、ログビューを作成し、次のいずれかを行います。

  • roles/logging.viewAccessor のロールと、ログビューへの付与を制限する IAM 条件を付与します。

  • ログビューに関連付けられた IAM ポリシーで、プリンシパルにアクセス権を付与します。ログビューを大量に作成する場合は、この方法をおすすめします。

これら 2 つの方法の詳細については、ログビューへのアクセスを制御するをご覧ください。

次の手順では、プリンシパルに roles/logging.viewAccessor のロールと、_AllLogs という名前のビューへの付与を制限する IAM 条件を付与します。

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

    [IAM] に移動

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

  2. ログバケットを含む Google Cloud プロジェクトを選択します。

  3. [追加] をクリックします。

  4. [新しいプリンシパル] フィールドに、プリンシパルを追加します。

  5. [ロールを選択] メニューで [ログビュー アクセサー] を選択します。

    このロールに条件を追加しない場合、プリンシパルは、Google Cloud プロジェクト内のすべてのユーザー定義のログバケットのすべてのログビューにアクセスできます。

  6. バインディングに IAM 条件を追加します。

    1. [条件を追加] をクリックして、タイトルと説明を入力します。
    2. [条件タイプ] メニューで [リソース] までスクロールし、[名前] を選択します。
    3. [演算子] メニューで [次で終わる] を選択します。
    4. [] フィールドに、ログビューのフルネームを入力します。

      locations/LOCATION/buckets/BUCKET_NAME/views/_AllLogs
      
    5. [保存] をクリックして、条件を保存します。

  7. [保存] をクリックしてバインディングを保存します。

[ログ エクスプローラ]ページのログ エントリを表示する

ログバケットのログエントリを表示するには、次の操作を行います。

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

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

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

  2. [範囲を絞り込む] を選択します。

  3. [範囲を絞り込む] パネルで、[ログビュー] を選択します。

  4. 表示するログエントリを含むログビューを選択します。 たとえば、すべてのログエントリを表示するには、_AllLogs という名前のビューを選択します。

  5. [適用] をクリックします。

    [ログ エクスプローラ] が更新され、ログバケットのログエントリが表示されます。ログ エクスプローラの使用方法については、ログ エクスプローラの使用をご覧ください。