# GCP - Vertex AI Enumerazione

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

## Vertex AI

[Vertex AI](https://cloud.google.com/vertex-ai) è la **piattaforma unificata di machine learning** di Google Cloud per costruire, distribuire e gestire modelli AI su larga scala. Combina vari servizi AI e ML in un'unica piattaforma integrata, permettendo a data scientist e ingegneri ML di:

- **Addestrare modelli personalizzati** usando AutoML o custom training
- **Distribuire modelli** su endpoint scalabili per predizioni
- **Gestire il ciclo di vita ML** dalla sperimentazione alla produzione
- **Accedere a modelli pre-addestrati** da Model Garden
- **Monitorare e ottimizzare** le prestazioni dei modelli

### Componenti chiave

#### Models

I **modelli** di Vertex AI rappresentano modelli di machine learning addestrati che possono essere distribuiti su endpoint per fornire predizioni. I modelli possono essere:

- **Uploaded** da custom containers o model artifacts
- Creati tramite **AutoML** training
- Importati da **Model Garden** (modelli pre-addestrati)
- **Versioned** con più versioni per modello

Ogni modello ha metadati inclusi il framework, il container image URI, la posizione degli artifact e la configurazione di serving.

#### Endpoints

Gli **endpoints** sono risorse che ospitano modelli distribuiti e forniscono predizioni in tempo reale. Caratteristiche principali:

- Possono ospitare **più modelli distribuiti** (con traffic splitting)
- Forniscono **HTTPS endpoints** per predizioni in real-time
- Supportano **autoscaling** basato sul traffico
- Possono usare accesso **privato** o **pubblico**
- Supportano **A/B testing** tramite traffic splitting

#### Custom Jobs

I **Custom jobs** permettono di eseguire codice di training personalizzato usando i propri container o pacchetti Python. Le funzionalità includono:

- Supporto per **distributed training** con più worker pool
- Tipi di macchina e **acceleratori** (GPU/TPU) configurabili
- Allegato di **service account** per accedere ad altre risorse GCP
- Integrazione con **Vertex AI Tensorboard** per la visualizzazione
- Opzioni di **VPC connectivity**

#### Hyperparameter Tuning Jobs

Questi job cercano automaticamente gli **iperparametri ottimali** eseguendo molteplici trial di training con diverse combinazioni di parametri.

#### Model Garden

**Model Garden** fornisce accesso a:

- Modelli Google pre-addestrati
- Modelli open-source (incluso Hugging Face)
- Modelli di terze parti
- Capacità di deployment con un clic

#### Tensorboards

I **Tensorboards** forniscono visualizzazione e monitoraggio per esperimenti ML, tracciando metriche, grafi dei modelli e progresso del training.

### Account di servizio e permessi

Per impostazione predefinita, i servizi di Vertex AI utilizzano l'account di servizio predefinito di Compute Engine (`PROJECT_NUMBER-compute@developer.gserviceaccount.com`), che ha permessi Editor sul progetto. Tuttavia, puoi specificare service account personalizzati quando:

- Crei custom jobs
- Uploadi modelli
- Distribuisci modelli su endpoint

Questo account di servizio viene usato per:
- Accedere ai dati di training in Cloud Storage
- Scrivere log su Cloud Logging
- Accedere ai secret da Secret Manager
- Interagire con altri servizi GCP

### Archiviazione dati

- Gli **artifact dei modelli** sono archiviati in bucket di **Cloud Storage**
- I **dati di training** tipicamente risiedono in **Cloud Storage** o **BigQuery**
- Le **immagini dei container** sono archiviate in **Artifact Registry** o **Container Registry**
- I **log** sono inviati a **Cloud Logging**
- Le **metriche** sono inviate a **Cloud Monitoring**

### Crittografia

Per impostazione predefinita, Vertex AI utilizza **chiavi di crittografia gestite da Google**. Puoi anche configurare:

- **Customer-managed encryption keys (CMEK)** da **Cloud KMS**
- La crittografia si applica ad artifact dei modelli, dati di training e endpoint

### Networking

Le risorse di Vertex AI possono essere configurate per:

- **Accesso pubblico a Internet** (predefinito)
- **VPC peering** per accesso privato
- **Private Service Connect** per connettività sicura
- Supporto **Shared VPC**

### Enumerazione
```bash
# List models
gcloud ai models list --region=<region>
gcloud ai models describe <model-id> --region=<region>
gcloud ai models list-version <model-id> --region=<region>

# List endpoints
gcloud ai endpoints list --region=<region>
gcloud ai endpoints describe <endpoint-id> --region=<region>
gcloud ai endpoints list --list-model-garden-endpoints-only --region=<region>

# List custom jobs
gcloud ai custom-jobs list --region=<region>
gcloud ai custom-jobs describe <job-id> --region=<region>

# Stream logs from a running job
gcloud ai custom-jobs stream-logs <job-id> --region=<region>

# List hyperparameter tuning jobs
gcloud ai hp-tuning-jobs list --region=<region>
gcloud ai hp-tuning-jobs describe <job-id> --region=<region>

# List model monitoring jobs
gcloud ai model-monitoring-jobs list --region=<region>
gcloud ai model-monitoring-jobs describe <job-id> --region=<region>

# List Tensorboards
gcloud ai tensorboards list --region=<region>
gcloud ai tensorboards describe <tensorboard-id> --region=<region>

# List indexes (for vector search)
gcloud ai indexes list --region=<region>
gcloud ai indexes describe <index-id> --region=<region>

# List index endpoints
gcloud ai index-endpoints list --region=<region>
gcloud ai index-endpoints describe <index-endpoint-id> --region=<region>

# Get operations (long-running operations status)
gcloud ai operations describe <operation-id> --region=<region>

# Test endpoint predictions (if you have access)
gcloud ai endpoints predict <endpoint-id> \
--region=<region> \
--json-request=request.json

# Make direct predictions (newer API)
gcloud ai endpoints direct-predict <endpoint-id> \
--region=<region> \
--json-request=request.json
```
### Raccolta di informazioni sul modello
```bash
# Get detailed model information including versions
gcloud ai models describe <model-id> --region=<region>

# Check specific model version
gcloud ai models describe <model-id>@<version> --region=<region>

# List all versions of a model
gcloud ai models list-version <model-id> --region=<region>

# Get model artifact location (usually a GCS bucket)
gcloud ai models describe <model-id> --region=<region> --format="value(artifactUri)"

# Get container image URI
gcloud ai models describe <model-id> --region=<region> --format="value(containerSpec.imageUri)"
```
### Dettagli dell'endpoint
```bash
# Get endpoint details including deployed models
gcloud ai endpoints describe <endpoint-id> --region=<region>

# Get endpoint URL
gcloud ai endpoints describe <endpoint-id> --region=<region> --format="value(deployedModels[0].displayName)"

# Get service account used by endpoint
gcloud ai endpoints describe <endpoint-id> --region=<region> --format="value(deployedModels[0].serviceAccount)"

# Check traffic split between models
gcloud ai endpoints describe <endpoint-id> --region=<region> --format="value(trafficSplit)"
```
### Informazioni sul job personalizzato
```bash
# Get job details including command, args, and service account
gcloud ai custom-jobs describe <job-id> --region=<region>

# Get service account used by job
gcloud ai custom-jobs describe <job-id> --region=<region> --format="value(jobSpec.workerPoolSpecs[0].serviceAccount)"

# Get container image used
gcloud ai custom-jobs describe <job-id> --region=<region> --format="value(jobSpec.workerPoolSpecs[0].containerSpec.imageUri)"

# Check environment variables (may contain secrets)
gcloud ai custom-jobs describe <job-id> --region=<region> --format="value(jobSpec.workerPoolSpecs[0].containerSpec.env)"

# Get network configuration
gcloud ai custom-jobs describe <job-id> --region=<region> --format="value(jobSpec.network)"
```
### Controllo degli accessi
```bash
# Note: IAM policies for individual Vertex AI resources are managed at the project level
# Check project-level permissions
gcloud projects get-iam-policy <project-id>

# Check service account permissions
gcloud iam service-accounts get-iam-policy <service-account-email>

# Check if endpoints allow unauthenticated access
# This is controlled by IAM bindings on the endpoint
gcloud projects get-iam-policy <project-id> \
--flatten="bindings[].members" \
--filter="bindings.role:aiplatform.user"
```
### Archiviazione e Artefatti
```bash
# Models and training jobs often store artifacts in GCS
# List buckets that might contain model artifacts
gsutil ls

# Common artifact locations:
# gs://<project>-aiplatform-<region>/
# gs://<project>-vertex-ai/
# gs://<custom-bucket>/vertex-ai/

# Download model artifacts if accessible
gsutil -m cp -r gs://<bucket>/path/to/artifacts ./artifacts/

# Check for notebooks in AI Platform Notebooks
gcloud notebooks instances list --location=<location>
gcloud notebooks instances describe <instance-name> --location=<location>
```
### Model Garden
```bash
# List Model Garden endpoints
gcloud ai endpoints list --list-model-garden-endpoints-only --region=<region>

# Model Garden models are often deployed with default configurations
# Check for publicly accessible endpoints
```
### Privilege Escalation

Nella pagina seguente puoi vedere come **abusare dei permessi di Vertex AI per escalate privileges**:

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

## Riferimenti

- [https://cloud.google.com/vertex-ai/docs](https://cloud.google.com/vertex-ai/docs)
- [https://cloud.google.com/vertex-ai/docs/reference/rest](https://cloud.google.com/vertex-ai/docs/reference/rest)

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