# GCP - Logging Enum

{{#include ../../../banners/hacktricks-training.md}}

## 基本情報

このサービスは、ユーザーがGCPからの**ログデータとイベント**を保存、検索、分析、監視、アラートすることを可能にします。

Cloud Loggingは他のGCPサービスと完全に統合されており、すべてのGCPリソースからのログの集中リポジトリを提供します。これは、App Engine、Compute Engine、Cloud FunctionsなどのさまざまなGCPサービスから**自動的にログを収集**します。また、Cloud LoggingエージェントやAPIを使用することで、オンプレミスや他のクラウドで実行されているアプリケーションにもCloud Loggingを使用できます。

主な機能：

- **ログデータの集中管理：** 様々なソースからのログデータを集約し、アプリケーションとインフラストラクチャの全体像を提供します。
- **リアルタイムログ管理：** 即時分析と応答のためにリアルタイムでログをストリーミングします。
- **強力なデータ分析：** 高度なフィルタリングと検索機能を使用して、大量のログデータを迅速に処理します。
- **BigQueryとの統合：** 詳細な分析とクエリのためにログをBigQueryにエクスポートします。
- **ログベースのメトリクス：** 監視とアラートのためにログデータからカスタムメトリクスを作成します。

### ログの流れ

<figure><img src="../../../images/image (3) (1) (1).png" alt=""><figcaption><p><a href="https://betterstack.com/community/guides/logging/gcp-logging/">https://betterstack.com/community/guides/logging/gcp-logging/</a></p></figcaption></figure>

基本的に、シンクとログベースのメトリクスは、ログがどこに保存されるべきかを決定します。

### GCP Loggingがサポートする設定

Cloud Loggingは多様な運用ニーズに合わせて高度に構成可能です：

1. **ログバケット（ウェブ上のログストレージ）：** Cloud Loggingでバケットを定義して**ログ保持**を管理し、ログエントリがどのくらいの期間保持されるかを制御します。
- デフォルトで、バケット`_Default`と`_Required`が作成されます（片方はもう片方が記録していないものを記録しています）。
- **\_Required**は：
````
```bash
LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
```

````
- **データの保持期間**はバケットごとに設定され、**少なくとも1日**でなければなりません。ただし、**\_Requiredの保持期間は400日**であり、変更することはできません。
- ログバケットは**Cloud Storageに表示されません。**

2. **ログシンク（ウェブのログルーター）：** フィルターに基づいて、Pub/Sub、BigQuery、またはCloud Storageなどのさまざまな宛先に**ログエントリをエクスポート**するためのシンクを作成します。
- **デフォルト**では、バケット`\_Default`と`\_Required`のためのシンクが作成されます：
- ```bash
_Required  logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Required  LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
_Default   logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Default   NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency")
```
- **除外フィルター：** 特定のログエントリが取り込まれないように**除外を設定することが可能**で、コストを節約し、不必要なノイズを減らします。
3. **ログベースのメトリクス：** ログの内容に基づいて**カスタムメトリクス**を設定し、ログデータに基づいてアラートや監視を行うことができます。
4. **ログビュー：** ログビューは、ログバケット内のログへのアクセスを持つ**誰に対しても高度で詳細な制御を提供**します。
- Cloud Loggingは、すべてのバケットに対して自動的に`\_AllLogs`ビューを作成し、すべてのログを表示します。Cloud Loggingはまた、`\_Default`バケットのために`\_Default`というビューを作成します。`\_Default`バケットの`\_Default`ビューは、データアクセス監査ログを除くすべてのログを表示します。`\_AllLogs`および`\_Default`ビューは編集できません。

特定のログビューを**使用するだけの権限を持つ**ようにIAMポリシーを設定することが可能です：
```json
{
"bindings": [
{
"members": ["user:username@gmail.com"],
"role": "roles/logging.viewAccessor",
"condition": {
"title": "Bucket reader condition example",
"description": "Grants logging.viewAccessor role to user username@gmail.com for the VIEW_ID log view.",
"expression": "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
}
}
],
"etag": "BwWd_6eERR4=",
"version": 3
}
```
### デフォルトログ

デフォルトでは、**Admin Write** 操作（Admin Activity 監査ログとも呼ばれる）が記録され（メタデータや構成情報を書き込む）、**無効にすることはできません**。

その後、ユーザーは **Data Access 監査ログ** を有効にできます。これには **Admin Read、Data Write、Data Write** が含まれます。

各ログタイプの詳細については、ドキュメントを参照してください: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

ただし、これはデフォルトで **`GetIamPolicy`** アクションやその他の読み取りアクションが **記録されていない** ことを意味します。したがって、デフォルトでは、環境を列挙しようとする攻撃者は、システム管理者がより多くのログを生成するように設定していなければ、捕まることはありません。

コンソールでより多くのログを有効にするには、システム管理者は [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) にアクセスして、それらを有効にする必要があります。2つの異なるオプションがあります：

- **デフォルト構成**: デフォルト構成を作成し、すべての Admin Read および/または Data Read および/または Data Write ログを記録し、免除されたプリンシパルを追加することが可能です：

<figure><img src="../../../images/image (338).png" alt=""><figcaption></figcaption></figure>

- **サービスを選択**: または、ログを生成したいサービスとその特定のサービスのログの種類および免除されたプリンシパルを**選択**することができます。

デフォルトでは、これらのログのみが生成されていることにも注意してください。より多くのログを生成するとコストが増加します。

### 列挙

`gcloud` コマンドラインツールは GCP エコシステムの不可欠な部分であり、リソースやサービスを管理することができます。ここでは、`gcloud` を使用してログ設定を管理し、ログにアクセスする方法を説明します。
```bash
# List buckets
gcloud logging buckets list
gcloud logging buckets describe <bucket-name> --location <location>

# List log entries: only logs that contain log entries are listed.
gcloud logging logs list

# Get log metrics
gcloud logging metrics list
gcloud logging metrics describe <metric-name>

# Get log sinks
gcloud logging sinks list
gcloud logging sinks describe <sink-name>

# Get log views
gcloud logging views list --bucket <bucket> --location global
gcloud logging views describe --bucket <bucket> --location global <view-id> # view-id is usually the same as the bucket name

# Get log links
gcloud logging links list --bucket _Default --location global
gcloud logging links describe <link-id> --bucket _Default --location global
```
**`cloudresourcemanager`**のログを確認する例（権限をブルートフォースするために使用されるもの）: [https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2\&project=digital-bonfire-410512](https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2&project=digital-bonfire-410512)

**`testIamPermissions`**のログはありません:

<figure><img src="../../../images/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

### ポストエクスプロイテーション

{{#ref}}
../gcp-post-exploitation/gcp-logging-post-exploitation.md
{{#endref}}

### パーシステンス

{{#ref}}
../gcp-persistence/gcp-logging-persistence.md
{{#endref}}

## 参考文献

- [https://cloud.google.com/logging/docs/logs-views#gcloud](https://cloud.google.com/logging/docs/logs-views#gcloud)
- [https://betterstack.com/community/guides/logging/gcp-logging/](https://betterstack.com/community/guides/logging/gcp-logging/)

{{#include ../../../banners/hacktricks-training.md}}
