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

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

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

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

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

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

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

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

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

始める前に

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

  • プリンシパル ロールの付与に必要な権限を取得するには、プロジェクトに対するオーナーroles/owner)IAM ロールの付与を管理者に依頼してください。

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

ログバケットの作成

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

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

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

    Google Cloud コンソールに移動

  2. Cloud Shell ターミナルで、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. 省略可: バケット内のログの保持期間を設定します。この例では、バケットに保存されたログの保持期間を 365 日間延長します。

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

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

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

作成したログバケットにログエントリを転送するシンクを作成するには、以下の置き換えを行い、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 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. [アクセスを許可] をクリックします。

  4. [新しいプリンシパル] フィールドに、serviceAccount: 接頭辞を付けずにサービス アカウントを追加します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    [IAM] に移動

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

    ログの集約に使用している Google Cloud プロジェクトが選択されていることを確認します。

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

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

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

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

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

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

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

[ログ エクスプローラ] ページでログを表示する

ログバケットのログを表示するには、次の手順を行います。

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

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

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

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

  3. [範囲を絞り込む] パネルで、[ストレージごとのスコープ] を選択します。

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

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

    [ログ エクスプローラ] が更新され、バケットのログが表示されます。

    ログ エクスプローラの使用方法については、ログ エクスプローラの使用をご覧ください。