# Google Cloud 仮想マシンスキャンのセットアップ

### 仮想マシンをスキャンすべき理由は？

仮想マシンスキャンを使用すると、Aikido は Google Compute Engine VM のディスクをスキャンし、脆弱なパッケージや古いランタイムを検出します。

### はじめに

Google Cloud インスタンスのスキャンを有効にするには、まず Google Cloud プロジェクトを Aikido に接続する必要があります。まだ接続していない場合は、[こちら](https://help.aikido.dev/cloud-scanning/connect-your-cloud/gcp)に記載されている手順に従ってください。

クラウドが接続されたら、Virtual Machines ページに移動し、**Connect VMs** をクリックします。

<figure><img src="https://help.aikido.dev/_assets/13b7cb4b543e/image-308.png" alt=""><figcaption></figcaption></figure>

**Connect your Virtual Machines** モーダルで、**Agentless scanning** の下にある **Google Cloud** を選択します。Aikido が以下の4つのステップを案内します。

カスタムロールとサービスアカウントには必要最小限の権限のみが付与され、ストレージ権限はプロジェクト全体ではなくスナップショットバケットのみに限定されます。これにより、Aikido はリソースを意図せず変更するリスクなしにセキュリティチェックを実行できます。

{% stepper %}
{% step %}
**必要な Google Cloud API を有効にする**

Aikido がコンピュートインスタンスをスキャンするには、プロジェクトでいくつかの Google Cloud API を有効にする必要があります。

1. GCP コンソールで、右上にある **Activate Cloud Shell** アイコンをクリックします。
2. 画面下部に開いたシェルで、セットアップページに表示されているコマンドを実行します。このコマンドにより、以下の API が有効になります。
   * `compute.googleapis.com`
   * `iam.googleapis.com`
3. コマンドが完了したら、**Continue** をクリックします。
{% endstep %}

{% step %}
**カスタムロールを作成する**

Aikido は2つのカスタムロールを使用します。

1. インスタンスの一覧表示、ディスクの読み取り、スナップショットの作成、スナップショットの読み取りを行うメインロール
2. Aikido が作成したスナップショットを削除するための削除専用ロール

セットアップウィザードに表示されているコマンドを実行して、両方のロールを作成します。

メインロールには以下が含まれます。

* `compute.instances.list`
* `compute.instanceGroups.get`
* `compute.instanceGroups.list`
* `compute.disks.createSnapshot`
* `compute.disks.get`
* `compute.snapshots.create`
* `compute.snapshots.get`
* `compute.snapshots.list`
* `compute.snapshots.setLabels`
* `compute.snapshots.useReadOnly`

2つ目のロールには以下が含まれます。

* `compute.snapshots.delete`

ロールが作成されたら、その ID（変更していない場合は `aikidoSecurityVmScannerRole` と `aikidoSecurityVmScannerSnapshotDeleteRole`）を控えておきます。

**Continue** を押します。

{% hint style="info" %}
**このロールのすべての権限を保持してください。** これは Aikido が VM スキャンを実行するために必要な絶対最小限の権限です。いずれかを削除すると、スキャンが失敗します。
{% endhint %}
{% endstep %}

{% step %}
**アクセスを付与する**

セットアップウィザードに、Aikido が管理する Google Cloud サービスアカウントのメールアドレスが表示されます。ステップ2で作成したロールを、Aikido が管理するサービスアカウントに付与します。

* ウィザードに表示されているコマンドを使用して、メインのカスタムロールをそのサービスアカウントに付与します。
* 次に、ウィザードに表示されている2つ目のコマンドを使用して、削除専用ロールを付与します。このバインディングには条件が含まれており、Aikido が作成したスナップショットにのみ適用されます。これにより、Aikido は自身が作成したスナップショットのみを削除できるようになります。
{% endstep %}
{% endstepper %}

### 仕組み

大まかな流れは以下のとおりです。

{% stepper %}
{% step %}
Aikido が Google Cloud プロジェクト内の GCE インスタンスを検出します。
{% endstep %}

{% step %}
Aikido がプロジェクト内の対応するディスクのスナップショットを作成します。

{% hint style="info" %}
Aikido はこれらのスナップショットにラベルを付けるため、付与した削除権限は Aikido が管理するスナップショットにのみ適用されます。
{% endhint %}
{% endstep %}

{% step %}
次に、Aikido は各スナップショットから Aikido が管理するプロジェクト内に一時ディスクを作成します。

{% hint style="info" %}
ディスクは、元のディスクと同じリージョンにある Aikido 管理プロジェクト内で作成およびスキャンされます。
{% endhint %}
{% endstep %}

{% step %}
一時ディスクは隔離されたエフェメラルジョブにアタッチされ、そのジョブが実際のスキャンを実行します。
{% endstep %}

{% step %}
一時ディスクは Aikido 管理プロジェクトから削除されます。
{% endstep %}
{% endstepper %}

### VPC Service Controls と併用して GCP VM スキャンを使用する

GCP プロジェクトが VPC Service Controls の境界で保護されている場合、[上記](https://help.aikido.dev/docs/docs-ja/virtual-machine-scanning/gcp-virtual-machine-scanning-configuration#getting-started)の IAM 権限に加えて、クロスプロジェクト操作を1つ追加で許可する必要がある場合があります。

[「仕組み」セクション](https://help.aikido.dev/docs/docs-ja/virtual-machine-scanning/gcp-virtual-machine-scanning-configuration#how-it-works)で説明したとおり、Aikido はお客様のプロジェクトにスナップショットを作成し、そのスナップショットから Aikido のスキャナープロジェクトに一時ディスクを作成します。このディスク作成は VPC Service Controls によってブロックされる可能性があります。

**許可する内容**

* サービス: `compute.googleapis.com`
* メソッド: `compute.v1.DisksService.Insert`
* 対象プロジェクト: `aikido-vm-scanning`
* サービスアカウント: `aikido-vm-scanner-batch@aikido-vm-scanning.iam.gserviceaccount.com`

### ドメイン制限付き共有と併用して GCP VM スキャンを使用する

`iam.managed.allowedPolicyMembers` や `iam.allowedPolicyMemberDomains` などの組織のポリシー制約を使用している場合、Aikido の Google Workspace 顧客 ID は `C016qe815` です。
