# GCP - Bigtable 列挙

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

## Bigtable

Google Cloud Bigtable は、非常に高いスループットと低遅延を必要とするアプリケーション向けに設計されたフルマネージドでスケーラブルな NoSQL データベースです。何千ものノードにわたるペタバイト級の大量データを扱えるように構築されており、読み取りおよび書き込みのパフォーマンスを維持します。Bigtable は、時系列データ、IoT テレメトリ、金融分析、パーソナライズエンジン、大規模な運用データベースなどのワークロードに最適です。基盤となるストレージモデルはスパースで分散された多次元ソートマップを使用しており、多くのカラムが空になるようなワイドテーブルの保存に効率的です。 [Learn more](https://cloud.google.com/bigtable).

### 階層

1. **Bigtable インスタンス**

Bigtable インスタンスは作成する最上位のリソースです。
それ自体でデータを保存するわけではなく、クラスタとテーブルをまとめる論理的なコンテナと考えてください。

インスタンスには 2 種類あります:

- Development instance（シングルノード、安価、プロダクション向けではない）
- Production instance（複数クラスタを持てる）

2. **Clusters**

クラスタは Bigtable データを提供するために使用される実際のコンピュートおよびストレージリソースを含みます。

- 各クラスタは単一のリージョンに属します。
- CPU、RAM、ネットワーク容量を提供するノードで構成されます。
- 高可用性やグローバルな読み書きのためにマルチクラスタインスタンスを作成できます。
- 同一インスタンス内のクラスタ間でデータは自動的に複製されます。

重要:
- テーブルは特定のクラスタではなくインスタンスに属します。
- クラスタは単にデータを提供するためのリソースを提供します。

3. **Tables**

Bigtable のテーブルは NoSQL データベースのテーブルに似ています:

- データは行に格納され、行は row key で識別されます。
- 各行はカラムファミリを含み、カラムファミリがカラムを含みます。
- スパースであるため、空のセルはスペースを消費しません。
- Bigtable は row key によって辞書式（lexicographic）にソートされた状態でデータを保存します。

テーブルはインスタンス内のすべてのクラスタによって提供されます。

4. **Tablets（およびホットタブレット）**

Bigtable は各テーブルを tablet と呼ばれる水平パーティションに分割します。テーブルは次のようなものです:

- 行キーの連続した範囲。
- 任意の時点で単一のノードに格納されます。
- Tablets は Bigtable によって自動的に分割、結合、移動されます。

**ホットタブレット（hot tablet）** は次の場合に発生します:

- 同じ行キー範囲（同一の tablet）に対して読み取りまたは書き込みが過度に集中する。
- その特定の tablet／ノードが過負荷になる。
- これによりホットスポット（パフォーマンスのボトルネック）が発生します。

5. **Authorized Views**

Authorized views を使うと、テーブル全体へのアクセス権を与えずに特定のユーザーやアプリケーションと共有できるテーブルデータのサブセットを作成できます。これは次の用途に有用です:

- センシティブなデータへのアクセスを制限する。
- 特定のカラムや行に対する読み取り専用アクセスを提供する。

6. **App プロファイル**

Bigtable の App プロファイルは、特に複数クラスタが存在する環境で、特定のアプリケーションやクライアントが Bigtable インスタンスとどのようにやり取りするかを定義する設定です。ルーティングの挙動（リクエストを単一クラスタへ向けるか高可用性のために複数クラスタへ分散するか）を制御し、書き込みの複製方法（同期的：より強い一貫性、非同期的：低遅延）を決定します。
```bash
# Cloud Bigtable
gcloud bigtable instances list
gcloud bigtable instances describe <instance>
gcloud bigtable instances get-iam-policy <instance>

## Clusters
gcloud bigtable clusters list
gcloud bigtable clusters describe <cluster>

## Tables
gcloud bigtable tables list --instance <INSTANCE>
gcloud bigtable tables describe --instance <INSTANCE> <TABLE>
gcloud bigtable tables get-iam-policy --instance <INSTANCE> <TABLE>

## Backups
gcloud bigtable backups list --instance <INSTANCE>
gcloud bigtable backups describe --instance <INSTANCE> <backupname>
gcloud bigtable backups get-iam-policy --instance <INSTANCE> <backupname>

## Hot Tables
gcloud bigtable hot-tablets list

## App Profiles
gcloud bigtable app-profiles list --instance <INSTANCE>
gcloud bigtable app-profiles describe --instance <INSTANCE> <app-prof>

## Authorized Views
gcloud bigtable authorized-views list --instance <INSTANCE> --table <TABLE>
gcloud bigtable authorized-views describe --instance <INSTANCE> --table <TABLE> <VIEW>
```
## Privilege Escalation

{{#ref}}
../gcp-privilege-escalation/gcp-bigtable-privesc.md
{{#endref}}

## Post Exploitation

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

## Persistence

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

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