# GCP - Instances de calcul

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

## Informations de base

Les instances de calcul Google Cloud sont **des machines virtuelles personnalisables sur l'infrastructure cloud de Google**, offrant une puissance de calcul évolutive et à la demande pour une large gamme d'applications. Elles fournissent des fonctionnalités telles que le déploiement mondial, le stockage persistant, des choix de systèmes d'exploitation flexibles, et de fortes intégrations réseau et sécurité, ce qui en fait un choix polyvalent pour l'hébergement de sites web, le traitement de données et l'exécution d'applications de manière efficace dans le cloud.

### VM confidentielle

Les VM confidentielles utilisent **des fonctionnalités de sécurité basées sur le matériel** offertes par la dernière génération de processeurs AMD EPYC, qui incluent le chiffrement de la mémoire et la virtualisation chiffrée sécurisée. Ces fonctionnalités permettent à la VM de protéger les données traitées et stockées à l'intérieur d'elle-même, même contre le système d'exploitation hôte et l'hyperviseur.

Pour exécuter une VM confidentielle, il peut être nécessaire de **changer** des éléments tels que le **type** de la **machine**, l'**interface** réseau, l'**image du disque de démarrage**.

### Disque et chiffrement de disque

Il est possible de **sélectionner le disque** à utiliser ou **d'en créer un nouveau**. Si vous sélectionnez un nouveau, vous pouvez :

- Sélectionner la **taille** du disque
- Sélectionner le **système d'exploitation**
- Indiquer si vous souhaitez **supprimer le disque lorsque l'instance est supprimée**
- **Chiffrement** : Par **défaut**, une **clé gérée par Google** sera utilisée, mais vous pouvez également **sélectionner une clé de KMS** ou indiquer **une clé brute à utiliser**.

### Déployer un conteneur

Il est possible de déployer un **conteneur** à l'intérieur de la machine virtuelle.\
Il est possible de configurer l'**image** à utiliser, de définir la **commande** à exécuter à l'intérieur, les **arguments**, de monter un **volume**, et des **variables d'environnement** (informations sensibles ?) et de configurer plusieurs options pour ce conteneur comme exécuter en tant que **privilégié**, stdin et pseudo TTY.

### Compte de service

Par défaut, le **compte de service par défaut de Compute Engine** sera utilisé. L'email de ce compte de service est comme : `<proj-num>-compute@developer.gserviceaccount.com`\
Ce compte de service a le **rôle d'éditeur sur l'ensemble du projet (hauts privilèges).**

Et les **portées d'accès par défaut** sont les suivantes :

- **https://www.googleapis.com/auth/devstorage.read\_only** -- Accès en lecture aux buckets :)
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/trace.append

Cependant, il est possible de **l'accorder `cloud-platform` d'un clic** ou de spécifier **des personnalisées**.

<figure><img src="../../../../images/image (327).png" alt=""><figcaption></figcaption></figure>

### Pare-feu

Il est possible de permettre le trafic HTTP et HTTPS.

<figure><img src="../../../../images/image (326).png" alt=""><figcaption></figcaption></figure>

### Réseau

- **Transfert IP** : Il est possible de **permettre le transfert IP** dès la création de l'instance.
- **Nom d'hôte** : Il est possible de donner à l'instance un nom d'hôte permanent.
- **Interface** : Il est possible d'ajouter une interface réseau.

### Sécurité supplémentaire

Ces options **augmenteront la sécurité** de la VM et sont recommandées :

- **Démarrage sécurisé :** Le démarrage sécurisé aide à protéger vos instances de VM contre les logiciels malveillants au niveau du démarrage et du noyau ainsi que les rootkits.
- **Activer vTPM :** Le module de plateforme de confiance virtuel (vTPM) valide l'intégrité de pré-démarrage et de démarrage de votre VM invitée, et offre génération et protection de clés.
- **Supervision de l'intégrité :** La surveillance de l'intégrité vous permet de surveiller et de vérifier l'intégrité de démarrage en cours d'exécution de vos instances de VM protégées à l'aide des rapports Stackdriver. Nécessite que vTPM soit activé.

### Accès à la VM

La manière courante d'activer l'accès à la VM est de **permettre à certaines clés SSH publiques** d'accéder à la VM.\
Cependant, il est également possible d'**activer l'accès à la VM via le service `os-config` en utilisant IAM**. De plus, il est possible d'activer l'authentification à deux facteurs pour accéder à la VM en utilisant ce service.\
Lorsque ce **service** est **activé**, l'accès via **clés SSH est désactivé.**

<figure><img src="../../../../images/image (328).png" alt=""><figcaption></figcaption></figure>

### Métadonnées

Il est possible de définir **l'automatisation** (userdata dans AWS) qui sont **des commandes shell** qui seront exécutées chaque fois que la machine s'allume ou redémarre.

Il est également possible d'**ajouter des valeurs de clé-valeur de métadonnées supplémentaires** qui seront accessibles depuis le point de terminaison des métadonnées. Ces informations sont couramment utilisées pour les variables d'environnement et les scripts de démarrage/arrêt. Cela peut être obtenu en utilisant la **méthode `describe`** d'une commande dans la section d'énumération, mais cela pourrait également être récupéré de l'intérieur de l'instance en accédant au point de terminaison des métadonnées.
```bash
# view project metadata
curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"

# view instance metadata
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
-H "Metadata-Flavor: Google"
```
De plus, **le jeton d'authentification pour le compte de service attaché** et **les informations générales** sur l'instance, le réseau et le projet seront également disponibles à partir de **l'endpoint de métadonnées**. Pour plus d'infos, consultez :

{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}

### Chiffrement

Une clé de chiffrement gérée par Google est utilisée par défaut, mais une clé de chiffrement gérée par le client (CMEK) peut être configurée. Vous pouvez également configurer ce qu'il faut faire lorsque le CMEK utilisé est révoqué : Noter ou éteindre la VM.

<figure><img src="../../../../images/image (329).png" alt=""><figcaption></figcaption></figure>

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