# GCP - Bigtable Enum

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

## Bigtable

Google Cloud Bigtable è un database NoSQL fully managed e scalabile progettato per applicazioni che richiedono throughput molto elevato e latenza molto bassa. È pensato per gestire quantità massive di dati — petabyte su migliaia di nodi — fornendo comunque prestazioni rapide in lettura e scrittura. Bigtable è ideale per carichi di lavoro come dati di serie temporali, telemetria IoT, analisi finanziarie, motori di personalizzazione e database operativi su larga scala. Usa come modello di archiviazione sottostante una mappa ordinata, multidimensionale, sparsa e distribuita, il che la rende efficiente nello stoccare tabelle “wide” dove molte colonne possono essere vuote. [Learn more](https://cloud.google.com/bigtable).

### Gerarchia

1. **Bigtable Instance**

Una istanza Bigtable è la risorsa di livello superiore che crei.
Non memorizza dati di per sé — pensala come un contenitore logico che raggruppa cluster e tabelle.

Esistono due tipi di istanze:

- Development instance (single-node, economica, non per ambienti di produzione)
- Production instance (può avere più cluster)

2. **Clusters**

Un cluster contiene le risorse di calcolo e storage effettive usate per servire i dati di Bigtable.

- Ogni cluster risiede in una singola regione.
- È composto da nodi, che forniscono CPU, RAM e capacità di rete.
- Puoi creare istanze multi-cluster per alta disponibilità o letture/scritture globali.
- I dati vengono replicati automaticamente tra i cluster della stessa istanza.

Importante:
- Le tabelle appartengono all’istanza, non a un cluster specifico.
- I cluster forniscono semplicemente le risorse per servire i dati.

3. **Tables**

Una tabella in Bigtable è simile a una tabella in database NoSQL:

- I dati sono memorizzati in righe, identificate da una row key.
- Ogni riga contiene column family, che a loro volta contengono colonne.
- È sparsa: le celle vuote non consumano spazio.
- Bigtable memorizza i dati ordinati lessicograficamente per row key.

Le tabelle sono servite da tutti i cluster nell’istanza.

4. **Tablets (and Hot Tablets)**

Bigtable suddivide ogni tabella in partizioni orizzontali chiamate tablets. Un tablet è:

- Un intervallo contiguo di row key.
- Memorizzato su un singolo nodo in un dato momento.
- I tablet vengono automaticamente splittati, uniti e spostati da Bigtable.

Un **hot tablet** si verifica quando:

- Troppe letture o scritture colpiscono lo stesso intervallo di row-key (lo stesso tablet).
- Quel tablet/nodo specifico diventa sovraccarico.
- Questo porta a hotspot (colli di bottiglia nelle prestazioni).

5. **Authorized Views**

Le authorized views permettono di creare un sottoinsieme dei dati di una tabella che può essere condiviso con utenti o applicazioni specifiche senza dare accesso all’intera tabella. Questo è utile per:

- Limitare l’accesso a dati sensibili.
- Fornire accesso in sola lettura a colonne o righe specifiche.

6. **App Profiles**

Un app profile Bigtable è una configurazione che definisce come una specifica applicazione o client dovrebbe interagire con un’istanza Bigtable, specialmente in ambienti con più cluster. Controlla il comportamento di routing — se le richieste devono essere indirizzate a un singolo cluster o distribuite tra più cluster per alta disponibilità — e governa come le scritture vengono replicate, scegliendo tra modalità sincrona (consistenza più forte) o asincrona (minore latenza).
```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}}
