
# Kubernetesクラスタースキャン

## Kubernetesクラスターを接続する理由

Aikidoは、KubernetesマニフェストやHelmチャートを含む[Infrastructure as Codeファイルをスキャン](https://help.aikido.dev/general-information/sast-by-aikido-supported-languages-and-security-focus)しますが、クラスターを接続することで、Aikidoはより多くの（そしてより強力な）チェックを実行できるようになり、実際の環境を検証することも可能になります。

Aikidoは[一連のルール](https://app.aikido.dev/clouds/checks?cloudCheckType=kubernetes)に照らしてKubernetesリソースを評価し、逸脱があれば課題を生成します。生成された課題は、「Kubernetes Configurations」で並べ替えることで[フィード内](https://app.aikido.dev/queue?issue_type_filter=kubernetes)で確認できます。

<figure><img src="https://help.aikidogov.us/_assets/b21490ae24a8/image-154.png" alt=""><figcaption></figcaption></figure>

さらに、Aikidoはクラスターにデプロイされたイメージをスキャンすることもできます。詳細は[以下](https://help.aikidogov.us/docs/docs-ja/cloud-scanning/kubernetes-cluster-scanning#image-scanning)を参照してください。

## はじめに

[Cloudsページ](https://app.aikido.dev/clouds)に移動し、「Connect Cloud」をクリックして「Kubernetes」を選択します。これは、AWS EKS、Azure Kubernetes Service、Google Kubernetes Engine、その他のマネージドKubernetesサービス、およびセルフマネージドのオンプレミスまたはクラウドベースのデプロイメントを含む、すべてのKubernetes環境に適用されます。

最初のステップでは、次の情報を入力します。

* **クラスター名**：これはAikido内でのみ使用されます。任意の名前を付けられますが、Aikidoワークスペース内で一意である必要があります。
* **除外する名前空間**：必要に応じて、特定のKubernetes名前空間からのリソース収集を除外できます。一般的に除外される名前空間（例：kube-system、kube-public、クラウドプロバイダー固有の名前空間など）をすばやく追加するオプションも用意されています。
* **イメージスキャン**：コンテナイメージからSBOMを生成する追加コンポーネントがクラスターにインストールされます。これらのSBOMはAikidoによってスキャンされ、これらのイメージに影響する課題が表示されます。[Kubernetesクラスター内イメージスキャン](https://help.aikido.dev/~/revisions/zVer63pN7HO83qF6ZCQx/cloud-scanning/kubernetes-cluster-scanning/kubernetes-in-cluster-image-scanning)を参照してください。
* **環境**：クラウドの場合と同じ目的で、Aikidoが検出結果の重大度を調整できるようにします。

次に、クラスターにAikidoエージェントをインストールします。必要なものは次のとおりです。

* [Helm CLI](https://helm.sh/docs/intro/install/)
* クラスターへのアクセス権とHelmチャートをインストールする権限

アプリ内の手順に従って、Aikidoエージェントをデプロイメント（現在は単一のPodとして実行）としてデプロイするチャートをインストールします。エージェントは数秒で起動し、オンボーディングを完了できるようになります。

### 既存クラスターの更新

既に接続されているクラスターについて、除外する名前空間を更新したり、クラスター内イメージスキャンを有効化/無効化したりできます。

{% hint style="info" %}
クラスター内イメージスキャンの設定を変更する場合は、[KubernetesエージェントのHelmリリース](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/values.yaml#L27)でSBOMコレクターがそれに応じて有効または無効になっていることを確認する必要があります。この設定は自動的には更新されません。

ほとんどの場合、次のコマンドで変更を適用できます。

```shellscript
helm upgrade aikido -n aikido \
  aikido/kubernetes-agent \
  --reuse-values \
  --set sbomCollector.enabled=true # or false
```
{% endhint %}

### 脅威検出

Runtime Sensorsは、接続されたクラスターの脅威を監視できます。クラスターの編集設定で脅威検出のトグルをオンにしてください。

{% hint style="warning" %}
トグルだけでは脅威検出は開始されません。`runtimeDetection.enabled=true`を指定してHelm upgradeを実行してください。詳細については、[Runtime Sensorsを有効にする](https://help.aikidogov.us/docs/docs-ja/runtime-sensors/runtime-sensors-overview/enable-runtime-sensors)を参照してください。
{% endhint %}

## OpenShiftのサポート

Aikidoは、オンプレミスまたはマネージド環境で実行されるOpenShift Container Platformを含む、**OpenShift**クラスターを完全にサポートしています。エージェントとSBOMコレクターは他のKubernetesディストリビューションと同じように動作しますが、以下に示すOpenShift固有の統合と考慮事項がいくつかあります。

### イメージミラーの解決

OpenShiftでは一般的にイメージミラー（例：Quayや内部レジストリ経由）が使用されます。Aikidoはこれらのマッピングを自動的に解決し、イメージがミラーされた参照ではなく元のソースイメージを使用して報告・関連付けされるようにします。

これを実現するために、エージェントはクラスターから次のようなOpenShiftのイメージミラー設定を読み取ります。

* `ImageContentSourcePolicies`
* `ImageDigestMirrorSets`
* `ImageTagMirrorSets`

これにより、正確なイメージの識別と脆弱性の関連付けが可能になり、UI上でイメージエントリーが重複したり誤解を招いたりすることを防ぎます。

### カスタムCA証明書

一部のOpenShiftクラスターは、カスタムまたは内部の認証局に依存しています。Aikidoは、追加のCA証明書をマウントできるようにすることでこれに対応しています。

Helmチャートでは[次のことが可能です](https://github.com/AikidoSec/helm-charts?tab=readme-ov-file#custom-ca-certificates)。

* 追加のボリュームとボリュームマウントを追加する
* `SSL_CERT_FILE`や`SSL_CERT_DIR`などの標準的な環境変数を使用して、エージェントにカスタムのトラストバンドルを指定する

### イメージプルシークレット

デフォルトでは、AikidoはRBAC権限を使用してコンテナイメージにアクセスできます。これは最もシンプルな構成で、レジストリの認証情報をAikidoの名前空間にコピーする必要がありません。

RBACベースのアクセスが望ましくない、または不可能な環境では、エージェントは[イメージプルシークレットを直接マウントする](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/values.yaml#L106)こともサポートしています。これにより、レジストリの認証情報を明示的に制御でき、より制限の厳しいOpenShift構成で役立ちます。

どちらのアプローチもサポートされており、機能的に同等です。クラスターのセキュリティと運用モデルに最も適したものを選択してください。

## FIPS準拠イメージ

Aikidoは、FedRAMP環境向けに、KubernetesエージェントとSBOMコレクターのFIPS準拠バリアントを公開しています。

**Kubernetesエージェント（FIPS）** `public.ecr.aws/aikido-cloud/kubernetes-agent-fips:v1.19.0`

**SBOMコレクター（FIPS）** `public.ecr.aws/aikido-cloud/kubernetes-sbom-collector-fips:v1.9.0`

これらを使用するには、Helmチャートのrepoの値に`-fips`を追加してください。

## よくある質問

#### 1. Aikidoエージェントはクラスター内で何ができますか？

AikidoエージェントはKubernetesリソースを読み取ることしかできません。さらに、自己管理のために、自身の名前空間に限定された最小限の権限を持っています。付与される権限は[Helmチャート内](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/templates/agent/cluster_rbac.yaml)で確認できます。

#### 2. Aikidoエージェントはクラスターのパフォーマンスにどのような影響を与えますか？

エージェントの唯一の目的は、Kubernetesクラスターからリソースを収集することです。そのため、エージェントのリソース使用量はごくわずかです。Helmチャートのインストール時に[リソースリクエストとリミット](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/values.yaml#L17)をカスタマイズできます。

#### 3. クラスターをパブリックにする必要がありますか？

いいえ。トラフィックはエージェントからAikidoプラットフォームへの一方向のみです。

#### 4. Aikidoエージェントにメンテナンスは必要ですか？

いいえ。エージェントの新しいバージョンがリリースされると、自動的に更新されます。なお、エージェントが[更新/パッチできるのは自身のデプロイメントとシークレットのみ](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/templates/agent/rbac.yaml#L14)です。

#### 5. AikidoエージェントはKubernetesシークレットを読み取りますか？

いいえ。イメージプルシークレット（イメージスキャン用）を除き、Kubernetesシークレットにはアクセスできません。イメージプルシークレットについても、[特定のシークレットのみに制限する](https://github.com/AikidoSec/helm-charts/blob/main/kubernetes-agent/values.yaml#L99)ことができます。

#### 6. Aikidoエージェントがプラットフォームと通信できない場合はどうなりますか？無期限に試行し続けますか？

エージェントは、リソース収集に指数バックオフの仕組みを使用しています。Aikidoプラットフォームとの接続を確立できない場合は、追加のリソースを消費することなく待機状態になります。
