# GCP - Pub/Sub Enum

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

## Pub/Sub <a href="#reviewing-cloud-pubsub" id="reviewing-cloud-pubsub"></a>

[Google **Cloud Pub/Sub**](https://cloud.google.com/pubsub/) は、独立したアプリケーション間のメッセージ交換を促進するサービスとして説明されています。コアコンポーネントには、アプリケーションが**サブスクライブ**できる**トピック**が含まれます。サブスクライブされたアプリケーションは、**メッセージを送受信する**機能を持っています。各メッセージは、実際のコンテンツと関連するメタデータで構成されています。

**トピックはメッセージが送信されるキュー**であり、**サブスクリプション**はユーザーが**トピック内のメッセージにアクセスするために使用する****オブジェクト**です。**トピックごとに1つ以上のサブスクリプション**が存在する可能性があり、サブスクリプションには4つのタイプがあります：

- **プル**: このサブスクリプションのユーザーはメッセージをプルする必要があります。
- **プッシュ**: URLエンドポイントが指定され、メッセージは即座に送信されます。
- **ビッグクエリテーブル**: プッシュと同様ですが、メッセージをビッグクエリテーブル内に設定します。
- **Cloud Storage**: 既存のバケットに直接メッセージを配信します。

**デフォルト**では、**サブスクリプションは31日後に期限切れ**になりますが、期限切れにしないように設定することもできます。

**デフォルト**では、メッセージは**7日間保持され**ますが、この期間は**31日間まで延長**できます。また、**10秒以内にACKされない**場合、メッセージはキューに戻ります。ACKされたメッセージを引き続き保存するように設定することもできます。

トピックはデフォルトで**Google管理の暗号化キー**を使用して暗号化されます。ただし、KMSからの**CMEK**（顧客管理の暗号化キー）を選択することもできます。

**デッドレター**: サブスクリプションは**最大配信試行回数**を設定できます。メッセージが配信できない場合、指定されたデッドレタートピックに**再公開**されます。

### スナップショットとスキーマ

スナップショットは、**特定の時点でのサブスクリプションの状態をキャプチャする**機能です。これは本質的に、サブスクリプション内の未確認メッセージの一貫した**バックアップ**です。スナップショットを作成することで、サブスクリプションのメッセージ確認状態を保持し、スナップショットが取得された時点からメッセージの消費を再開することができます。元のメッセージが削除されるはずだった場合でも、スナップショットが取得された時点の**古い機密情報**を含む可能性があります。

トピックを作成する際に、**トピックメッセージはスキーマに従う必要がある**ことを示すことができます。

### 列挙
```bash
# Get a list of topics in the project
gcloud pubsub topics list
gcloud pubsub topics describe <topic>
gcloud pubsub topics list-subscriptions <topic>
gcloud pubsub topics get-iam-policy <topic>

# Get a list of subscriptions across all topics
gcloud pubsub subscriptions list
gcloud pubsub subscriptions describe <subscription>
gcloud pubsub subscriptions get-iam-policy <subscription>

# Get list of schemas
gcloud pubsub schemas list
gcloud pubsub schemas describe <schema>
gcloud pubsub schemas list-revisions <schema>

# Get list of snapshots
gcloud pubsub snapshots list
gcloud pubsub snapshots describe <snapshot>
```
しかし、より大きなデータセットを[**要求する**](https://cloud.google.com/pubsub/docs/replay-overview)ことで、より良い結果が得られるかもしれません。これにはいくつかの前提条件があり、アプリケーションに影響を与える可能性があるため、本当に何をしているのかを理解していることを確認してください。

### 権限昇格とポストエクスプロイト

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

## Pub/Sub Lite

[**Pub/Sub Lite**](https://cloud.google.com/pubsub/docs/choosing-pubsub-or-lite) は **ゾーンストレージ**を持つメッセージングサービスです。Pub/Sub LiteはPub/Subの**ごく一部のコスト**で、**高ボリュームストリーミング**（毎秒最大1000万メッセージ）パイプラインや低コストが主な考慮事項であるイベント駆動型システム向けに設計されています。

Pub/Sub Liteには**トピック**と**サブスクリプション**があり、**スナップショット**や**スキーマ**はありません。また、以下があります：

- **予約**: Pub/Sub Liteの予約は、ユーザーが特定の地域でメッセージストリームのために容量を予約できる機能です。
- **操作**: Pub/Sub Liteの管理や運営に関わるアクションやタスクを指します。

### 列挙
```bash
# lite-topics
gcloud pubsub lite-topics list
gcloud pubsub lite-topics describe <topic>
gcloud pubsub lite-topics list-subscriptions <topic>

# lite-subscriptions
gcloud pubsub lite-subscriptions list
gcloud pubsub lite-subscriptions describe <subscription>

# lite-reservations
gcloud pubsub lite-reservations list
gcloud pubsub lite-reservations describe <topic>
gcloud pubsub lite-reservations list-topics <topic>

# lite-operations
gcloud pubsub lite-operations list
gcloud pubsub lite-operations describe <topic>
```
{{#include ../../../banners/hacktricks-training.md}}
