このドキュメントでは、非インターセプト集約シンクを使用して、Google Cloud 組織に含まれるリソースによって生成されたログエンティティを管理する方法について説明します。
子リソースのシンクでどのログをクエリできるか、またはシンクを介してルーティングできるログエンティティかを制御するかに応じて、集約シンクをインターセプトする、またはインターセプトしない構成にできます。このチュートリアルでは、組織の監査ログを Google Cloud プロジェクトに転送し、集約された監査ログをログバケットに転送する集約シンクを作成します。
集約シンクについて詳しくは、組織レベルとフォルダレベルのログを照合してサポートされている宛先に転送するをご覧ください。
このチュートリアルでは、次の手順を行います。
まず、集約されたログエンティティを保存する Google Cloud プロジェクトにログバケットとログシンクを作成します。
次に、組織レベルで非インターセプト集約シンクを作成し、ログエントリをログバケットを含む Google Cloud プロジェクトに転送します。
次に、新しいログバケットのログビューへの読み取りアクセスを構成します。
最後に、[ログ エクスプローラ] ページからログエントリをクエリして表示します。
始める前に
次のことをご確認ください。
-
集約シンクの構成に必要な権限を取得するには、組織に対する次の 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.
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 プロジェクトでバケットを作成するには、次の手順を行います。
シェルを開きます。
たとえば、Cloud Shell を使用するには、次の操作を行います。
-
Google Cloud コンソールに移動します。
- ツールバーで terminal [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
ログバケットが作成されたことを確認します。
gcloud logging buckets list --project=PROJECT_ID
このコマンドのレスポンスは、プロジェクト内のログバケットのリストです。
ログバケットには、構成可能な保持期間があります。ログバケット内のログエントリの保持期間を設定するには、
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" \
集約シンクを作成する
集約シンクは、組織またはフォルダに含まれるリソースのログを組み合わせて、宛先に転送します。
このチュートリアルでは、インターセプトしない集約シンクを作成します。つまり、集約シンクによって転送されるすべてのログエントリは、ログエントリの発生元のリソースのシンクによっても転送されます。たとえば、プロジェクトで発生した監査ログは、集約シンクとそのプロジェクト内のシンクによって転送されます。そのため、ログエントリの複数のコピーを保存できます。
インターセプトするシンクを作成できます。詳細については、組織レベルとフォルダレベルのログを照合してサポート宛先に転送するをご覧ください。
組織レベルでシンクを設定する
インターセプトせず、ログエントリをプロジェクトに転送する集約シンクを作成するには、次の手順を行います。
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 プロジェクトとフォルダのログエントリがルーティングされます。詳細については、組織レベルのログをサポートされている宛先に照合して転送するをご覧ください。シンクが作成されたことを確認します。
gcloud logging sinks list --organization=ORGANIZATION_ID
サービス アカウントの名前を取得します。
gcloud logging sinks describe SINK_NAME --organization=ORGANIZATION_ID
出力は次のようになります。
writerIdentity: serviceAccount:o1234567890-ORGANIZATION_ID@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount
フィールドの値をクリップボードにコピーします。
シンクにアクセス権を付与する
集約シンクを作成したら、シンクが宛先として設定したプロジェクトにログエントリを書き込む権限を付与する必要があります。権限を付与するには、宛先権限の設定の説明に沿って、Google Cloud コンソールを使用するか、Identity and Access Management(IAM)ポリシーを編集します。
ログエントリの書き込み権限をシンクに付与するには、次の操作を行います。
-
Google Cloud コンソールの [IAM] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。
ログバケットを含む Google Cloud プロジェクトを選択します。
[
アクセスを許可] をクリックし、サービス アカウントを新しいプリンシパルとして追加します。serviceAccount: 接頭辞は含めないでください。[ロールを選択] メニューで [ログ書き込み] を選択します。
[保存] をクリックします。
シンク検証に役立つログエントリを生成する
集約シンクが正しく構成されていることを確認するには、次の手順を行います。
ログバケットに転送する必要がある監査ログエントリを生成します。
組織内に多数の Google Cloud プロジェクトがある場合は、監査ログのトラフィックが十分にあるため、検証目的で作成する必要がない場合があります。次のステップに進みます。
それ以外の場合は、別のプロジェクトに移動して Compute Engine VM インスタンスを作成し、作成したインスタンスを削除します。監査ログは、VM の作成、起動、削除時に書き込まれます。
[ログ エクスプローラ] ページでログを表示するというタイトルのセクションの手順に沿って、監査ログを表示します。
_AllLogs
ビューを選択してください。
ログバケットのログビューへの読み取りアクセスを構成する
ログバケットを作成すると、Cloud Logging によって _AllLogs
という名前のログビューが自動的に作成されます。
このビューには、ログバケットに保存されているすべてのログエントリが含まれます。
プリンシパルが特定のログエントリにのみアクセスできるように制限するには、ログビューを作成し、次のいずれかを行います。
roles/logging.viewAccessor
のロールと、ログビューへの付与を制限する IAM 条件を付与します。ログビューに関連付けられた IAM ポリシーで、プリンシパルにアクセス権を付与します。ログビューを大量に作成する場合は、この方法をおすすめします。
これら 2 つの方法の詳細については、ログビューへのアクセスを制御するをご覧ください。
次の手順では、プリンシパルに roles/logging.viewAccessor
のロールと、_AllLogs
という名前のビューへの付与を制限する IAM 条件を付与します。
-
Google Cloud コンソールの [IAM] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。
ログバケットを含む Google Cloud プロジェクトを選択します。
[
追加] をクリックします。[新しいプリンシパル] フィールドに、プリンシパルを追加します。
[ロールを選択] メニューで [ログビュー アクセサー] を選択します。
このロールに条件を追加しない場合、プリンシパルは、Google Cloud プロジェクト内のすべてのユーザー定義のログバケットのすべてのログビューにアクセスできます。
バインディングに IAM 条件を追加します。
- [条件を追加] をクリックして、タイトルと説明を入力します。
- [条件タイプ] メニューで [リソース] までスクロールし、[名前] を選択します。
- [演算子] メニューで [次で終わる] を選択します。
[値] フィールドに、ログビューのフルネームを入力します。
locations/LOCATION/buckets/BUCKET_NAME/views/_AllLogs
[保存] をクリックして、条件を保存します。
[保存] をクリックしてバインディングを保存します。
[ログ エクスプローラ]ページのログ エントリを表示する
ログバケットのログエントリを表示するには、次の操作を行います。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] である結果を選択します。
[範囲を絞り込む] を選択します。
[範囲を絞り込む] パネルで、[ログビュー] を選択します。
表示するログエントリを含むログビューを選択します。 たとえば、すべてのログエントリを表示するには、
_AllLogs
という名前のビューを選択します。[適用] をクリックします。
[ログ エクスプローラ] が更新され、ログバケットのログエントリが表示されます。ログ エクスプローラの使用方法については、ログ エクスプローラの使用をご覧ください。