
KubeClarityは、コンテナイメージとファイルシステムのソフトウェア部品表(SBOM)および脆弱性の検出と管理のためのツールです。
[!IMPORTANT] KubeClarityは非推奨となり、openclarity/openclarityに引き継がれました。
詳細はリリースのお知らせをご確認ください。
このプロジェクトは更新されません。移行を推奨します。
KubeClarityは、コンテナイメージとファイルシステムのソフトウェア部品表(SBOM)および脆弱性を検出・管理するためのツールです。ランタイムのK8sクラスターとCI/CDパイプラインの両方をスキャンし、ソフトウェアサプライチェーンセキュリティを強化します。

KubeClarityコンテンツアナライザーは以下のSBOM生成ツールと統合しています:
KubeClarity脆弱性スキャナーは以下のスキャナーと統合しています:

Helmリポジトリを追加 ```shell helm repo add kubeclarity https://openclarity.github.io/kubeclarity
KubeClarityのデフォルトチャート値を保存する
helm show values kubeclarity/kubeclarity > values.yaml
values.yamlの設定を確認し、必要に応じて値を更新してください。サポートされているSBOMジェネレーターと脆弱性スキャナーを有効にして設定するには、Helm valuesの"vulnerability-scanner"セクションにある"analyzer"と"scanner"の設定を確認してください。
HelmでKubeClarityをデプロイする ```shell helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity
または、OpenShift Restricted SCC 互換のインストール: ```shell
helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity --set global.openShiftRestricted=true
--set kubeclarity-postgresql.securityContext.enabled=false --set kubeclarity-postgresql.containerSecurityContext.enabled=false
--set kubeclarity-postgresql.volumePermissions.enabled=true --set kubeclarity-postgresql.volumePermissions.securityContext.runAsUser="auto"
--set kubeclarity-postgresql.shmVolume.chmod.enabled=false
3. KubeClarity UI にポートフォワーディングする: ```shell
kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
注記
KubeClarityには以下のK8s権限が必要です:
権限
Helmアンインストール ```shell helm uninstall kubeclarity -n kubeclarity
リソースのクリーンアップ
デフォルトでは、Helm は StatefulSet の PVC と PV を削除しません。以下のコマンドを実行して、それらをすべて削除してください:
kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity
UI とバックエンドをビルドし、バックエンドをローカルで起動します(2つのオプション):
VERSION=test make docker-backend
docker run -p 8080:8080 -e FAKE_RUNTIME_SCANNER=true -e FAKE_DATA=true -e ENABLE_DB_INFO_LOGS=true -e DATABASE_DRIVER=LOCAL ghcr.io/openclarity/kubeclarity:test run
make ui && make backend
cp -r ./ui/build ./site
FAKE_RUNTIME_SCANNER=true DATABASE_DRIVER=LOCAL FAKE_DATA=true ENABLE_DB_INFO_LOGS=true ./backend/bin/backend run
ブラウザで KubeClarity UI を開きます:http://localhost:8080/
KubeClarity には、ローカルで実行可能な CLI が含まれており、特に CI/CD パイプラインに役立ちます。 イメージやディレクトリを分析して SBOM を生成し、脆弱性をスキャンできます。 結果は KubeClarity バックエンドにエクスポートできます。
``` make cli ``` `./cli/bin/cli`を`kubeclarity-cli`としてPATHにコピーしてください。
使用方法:``` kubeclarity-cli analyze <image/directory name> --input-type <dir|file|image(default)> -o
例:```
kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
オプションで、使用するコンテンツアナライザのリストを ANALYZER_LIST 環境変数を使って、スペース区切りで設定できます(例: ANALYZER_LIST="<analyzer 1 name> <analyzer 2 name>")
例:``` ANALYZER_LIST="syft gomod" kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
### 脆弱性スキャン
使用方法:```
kubeclarity-cli scan <image/sbom/directoty/file name> --input-type <sbom|dir|file|image(default)> -f <output file>
例:``` kubeclarity-cli scan nginx.sbom --input-type sbom
オプションで、使用する脆弱性スキャナーをスペース区切りで指定したリストを `SCANNERS_LIST` 環境変数で設定できます(例:`SCANNERS_LIST="<Scanner1 name> <Scanner2 name>"`)
例:```
SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom
CLI の結果を KubeClarity バックエンドにエクスポートするには、KubeClarity バックエンドで定義されたアプリケーション ID を使用する必要があります。 アプリケーション ID は、UI の [Applications] 画面または KubeClarity API を使用して確認できます。
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli analyze --application-id -e -o
BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli analyze nginx:latest --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e -o nginx.sbom
#### 脆弱性スキャン結果のエクスポート```
# The vulnerability scan result can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST=<KubeClarity backend address> BACKEND_DISABLE_TLS=true kubeclarity-cli scan <image> --application-id <application ID> -e
# For example:
SCANNERS_LIST="grype" BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli scan nginx.sbom --input-type sbom --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e
LOCAL_IMAGE_SCAN=true kubeclarity-cli analyze nginx:latest -o nginx.sbom
## ローカルDockerイメージを入力として使用した脆弱性スキャン```
# Local docker images can be scanned using the LOCAL_IMAGE_SCAN env variable
# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli scan nginx.sbom
KubeClarity cli は、プライベートレジストリの認証情報を保存する設定ファイルを読み取ることができます。
設定ファイルのレジストリセクションの例:``` registry: auths: - authority: <registry 1> username: <username for registry 1> password: <password for registry 1> - authority: <registry 2> token: <token for registry 2>
Example registry config without authority: (in this case these credentials will be used for all registries)```
registry:
auths:
- username: <username>
password: <password>
--config command line flag.kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config
## K8sランタイムスキャンのプライベートレジストリサポート
Kubeclarityは、レジストリ認証のためにgoogle/go-containerregistryの[k8schain](https://github.com/google/go-containerregistry/tree/main/pkg/authn/k8schain#k8schain)を使用しています。必要なサービス資格情報がk8schainによって検出できない場合は、以下で説明するシークレットを介して定義できます。
さらに、サービス資格情報が"kubeclarity"名前空間にない場合は、CREDS_SECRET_NAMESPACEをkubeclarity Deploymentに設定してください。Helm [charts](https://github.com/openclarity/kubeclarity/blob/HEAD/charts)を使用する場合、CREDS_SECRET_NAMESPACEはkubeclarityのインストール先リリース名前空間に設定されます。
### Amazon ECR
`AmazonEC2ContainerRegistryFullAccess`権限を持つ[AWS IAMユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)を作成します。
ユーザー資格情報(`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、`AWS_DEFAULT_REGION`)を使用して、以下のシークレットを作成します。```
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: ecr-sa
namespace: kubeclarity
type: Opaque
data:
AWS_ACCESS_KEY_ID: $(echo -n 'XXXX'| base64 -w0)
AWS_SECRET_ACCESS_KEY: $(echo -n 'XXXX'| base64 -w0)
AWS_DEFAULT_REGION: $(echo -n 'XXXX'| base64 -w0)
EOF
注意:
ecr-sa にする必要がありますAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION に設定する必要がありますArtifact Registry Reader 権限を持つ Googleサービスアカウント を作成します。
サービスアカウントのJSONファイルを使用して、以下のSecretを作成します。``` kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa
注意:
1. シークレット名は `gcr-sa` でなければなりません
1. `sa.json` は、シークレット生成時のサービスアカウントのJSONファイル名でなければなりません
2. KubeClarityは [アプリケーションのデフォルト認証情報](https://developers.google.com/identity/protocols/application-default-credentials) を使用しています。これらは GCP から KubeClarity を実行する場合にのみ機能します。
## 異なるCI/CDステージ間でのSBOMと脆弱性のマージ```
# Additional SBOM will be merged into the final results when '--merge-sbom' is defined during analysis. The input SBOM can be CycloneDX XML or CyclonDX json format.
# For example:
ANALYZER_LIST="syft" kubeclarity-cli analyze nginx:latest -o nginx.sbom --merge-sbom inputsbom.xml
kubeclarity-cli analyzeコマンドは、結果のSBOMを必要に応じて異なる形式で出力し、別のシステムと統合することができます。サポートされている形式は次のとおりです:
| 形式 | 構成名 |
|---|---|
| CycloneDX JSON (デフォルト) | cyclonedx-json |
| CycloneDX XML | cyclonedx-xml |
| SPDX JSON | spdx-json |
| SPDX Tag Value |
警告
KubeClarityは内部的にCycloneDXを処理します。他の形式は変換を通じてサポートされています。変換処理は形式間の非互換性により情報が失われる可能性があるため、結果の出力にすべてのフィールドや情報が含まれることは保証されません。
デフォルト以外の形式を使用するようにkubeclarity-cliを構成するには、上記の構成名とともにANALYZER_OUTPUT_FORMAT環境変数を使用できます:``` ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom
## CLI用リモートスキャナーサーバー
kubeclarity CLIを実行して脆弱性をスキャンする場合、CLIは関連する脆弱性データベースをkubeclarity CLIが実行されている場所にダウンロードする必要があります。CI/CDパイプラインでCLIを実行すると、実行ごとにデータベースがダウンロードされ、時間と帯域幅を浪費します。このため、サポートされているスキャナーのいくつかには、サーバーがデータベース管理と場合によってはアーティファクトのスキャンを担当するリモートモードがあります。
> ***注記***
>
> 以下の例は各スキャナーに対するものですが、非リモートモードと同じように組み合わせて一緒に実行することが可能です。
### Trivy
TrivyスキャナーはTrivyサーバーを使用したリモートモードをサポートしています。Trivyサーバーは、[trivy client-server mode](https://aquasecurity.github.io/trivy/v0.34/docs/references/modes/client-server/) に記載されているようにデプロイできます。Trivy CLIのインストール手順は[trivy install](https://aquasecurity.github.io/trivy/v0.34/getting-started/installation/) で入手できます。Aquaチームは、Kubernetes/Dockerでサーバーを実行するための公式コンテナイメージを提供しており、ここでの例ではそれを使用します。
サーバーを起動するには:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080
サーバーを使用してスキャンを実行するには:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" ./kubeclarity_cli scan --input-type sbom nginx.sbom
Trivyサーバーは、トークンベースの認証も提供しており、防ぐために
Trivyサーバーインスタンスの不正使用を。それを有効にするには、実行することで
サーバーを追加のフラグを指定して:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080 --token mytoken
そしてトークンをスキャナーに渡す:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" SCANNER_TRIVY_SERVER_TOKEN="mytoken" ./kubeclarity_cli scan --input-type sbom nginx.sbom
### Grype
Grypeは、[grype-server](https://github.com/portshift/grype-server)を使用したリモートモードをサポートしています。これはRESTfulなgrypeラッパーで、SBOMを受け取り、そのSBOMに対するgrypeスキャン結果を返すAPIを提供します。Grype-serverはコンテナイメージとして提供されているため、kubernetes内またはdockerスタンドアロンで実行できます。
サーバーを起動するには:```
docker run -p 9991:9991 --rm gcr.io/eticloud/k8sec/grype-server:v0.1.5
サーバーを使用してスキャンを実行するには:``` SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS=":9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
GrypeサーバーがTLSでデプロイされている場合、デフォルトのURLスキームを次のように上書きできます:```
SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS="<grype server address>:9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
設定例はこちらをご覧ください
プルリクエストとバグ報告を歓迎します。
大きな変更については、まずGitHubでIssueを作成し、提案する変更とその影響について議論してください。
詳細については、このプロジェクトのコントリビューションガイドラインをご覧ください
| 理由 |
|---|
| CREDS_SECRET_NAMESPACE (デフォルト: kubeclarity) 内のシークレットを読み取り | プライベートイメージリポジトリをスキャンするためのイメージプルシークレットを設定できるようにするため。 |
| KubeClarityデプロイメント名前空間内のConfigMapを読み取り | スキャナージョブの設定テンプレートを取得するために必要。 |
| クラスタースコープでPodを一覧表示 | スキャンが必要なターゲットPodを算出するために必要。 |
| 名前空間を一覧表示 | K8sランタイムスキャンUIでスキャンするターゲット名前空間を取得するために必要。 |
| クラスタースコープでジョブを作成・削除 | ターゲットPodをその名前空間でスキャンするジョブを管理するために必要。 |
| spdx-tv |
| Syft JSON | syft-json |