# GCP - Compute Instances

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

## 基本情報

Google Cloud Compute Instancesは、**Googleのクラウドインフラストラクチャ上のカスタマイズ可能な仮想マシン**であり、さまざまなアプリケーション向けにスケーラブルでオンデマンドのコンピューティングパワーを提供します。これらは、グローバル展開、永続ストレージ、柔軟なOSの選択、強力なネットワーキングおよびセキュリティ統合などの機能を提供し、ウェブサイトのホスティング、データ処理、アプリケーションの効率的な実行において多用途な選択肢となります。

### 機密VM

機密VMは、**最新世代のAMD EPYCプロセッサ**が提供する**ハードウェアベースのセキュリティ機能**を使用しており、メモリ暗号化や安全な暗号化仮想化が含まれています。これらの機能により、VMはホストオペレーティングシステムやハイパーバイザーから処理および保存されたデータを保護できます。

機密VMを実行するには、**マシンのタイプ**、ネットワーク**インターフェース**、**ブートディスクイメージ**などを**変更**する必要がある場合があります。

### ディスクとディスク暗号化

使用する**ディスクを選択**するか、**新しいディスクを作成**することが可能です。新しいディスクを選択した場合、次のことができます：

- ディスクの**サイズ**を選択
- **OS**を選択
- インスタンスが削除されたときに**ディスクを削除する**かどうかを指定
- **暗号化**：**デフォルト**で**Google管理キー**が使用されますが、KMSから**キーを選択**するか、**使用する生のキー**を指定することもできます。

### コンテナのデプロイ

仮想マシン内に**コンテナ**をデプロイすることが可能です。\
使用する**イメージ**を設定し、内部で実行する**コマンド**、**引数**、**ボリューム**をマウントし、**環境変数**（機密情報？）を設定し、このコンテナのために**特権**として実行する、stdinおよび擬似TTYなどのいくつかのオプションを構成できます。

### サービスアカウント

デフォルトでは、**Compute Engineのデフォルトサービスアカウント**が使用されます。このSAのメールは次のようになります：`<proj-num>-compute@developer.gserviceaccount.com`\
このサービスアカウントは、**プロジェクト全体に対するエディターロール（高い権限）**を持っています。

そして、**デフォルトのアクセススコープ**は次のとおりです：

- **https://www.googleapis.com/auth/devstorage.read\_only** -- バケットへの読み取りアクセス :)
- [https://www.googleapis.com/auth/logging.write](https://www.googleapis.com/auth/logging.write)
- [https://www.googleapis.com/auth/monitoring.write](https://www.googleapis.com/auth/monitoring.write)
- [https://www.googleapis.com/auth/servicecontrol](https://www.googleapis.com/auth/servicecontrol)
- [https://www.googleapis.com/auth/service.management.readonly](https://www.googleapis.com/auth/service.management.readonly)
- [https://www.googleapis.com/auth/trace.append](https://www.googleapis.com/auth/trace.append)

ただし、**クリック一つで`cloud-platform`を付与**するか、**カスタムのものを指定**することも可能です。

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

### ファイアウォール

HTTPおよびHTTPSトラフィックを許可することが可能です。

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

### ネットワーキング

- **IP転送**：インスタンスの作成時に**IP転送を有効にする**ことが可能です。
- **ホスト名**：インスタンスに永続的なホスト名を付けることが可能です。
- **インターフェース**：ネットワークインターフェースを追加することが可能です。

### 追加のセキュリティ

これらのオプションは、VMの**セキュリティを向上させ**、推奨されます：

- **セキュアブート**：セキュアブートは、VMインスタンスをブートレベルおよびカーネルレベルのマルウェアやルートキットから保護します。
- **vTPMを有効にする**：仮想トラステッドプラットフォームモジュール（vTPM）は、ゲストVMのプレブートおよびブートの整合性を検証し、キーの生成と保護を提供します。
- **整合性監視**：整合性監視により、Stackdriverレポートを使用してシールドされたVMインスタンスのランタイムブート整合性を監視および検証できます。vTPMを有効にする必要があります。

### VMアクセス

VMへのアクセスを有効にする一般的な方法は、**特定のSSH公開鍵**をVMにアクセスできるようにすることです。\
ただし、**IAMを使用して`os-config`サービス経由でVMへのアクセスを有効にする**ことも可能です。さらに、このサービスを使用してVMへのアクセスに2FAを有効にすることも可能です。\
この**サービス**が**有効**になると、**SSHキーによるアクセスは無効**になります。

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

### メタデータ

**自動化**（AWSのuserdata）を定義することが可能で、これは**シェルコマンド**であり、マシンが起動または再起動するたびに実行されます。

また、メタデータエンドポイントからアクセス可能な**追加のメタデータキー-バリュー**を**追加**することも可能です。この情報は、環境変数やスタートアップ/シャットダウンスクリプトに一般的に使用されます。これは、列挙セクションのコマンドからの**`describe`メソッド**を使用して取得できますが、インスタンス内からメタデータエンドポイントにアクセスして取得することもできます。
```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"
```
さらに、**添付されたサービスアカウントの認証トークン**と**インスタンス、ネットワーク、プロジェクトに関する一般情報**も**メタデータエンドポイント**から取得できます。詳細については、以下を確認してください：

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

### 暗号化

デフォルトではGoogle管理の暗号化キーが使用されますが、顧客管理の暗号化キー（CMEK）を設定することもできます。また、使用されているCMEKが取り消された場合の処理を設定することもできます：VMをシャットダウンするか、何もしないかです。

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

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