IBM Cloud 用の Code Risk Analyzer プラグイン

コード・リスク・アナライザーは2027年2月12日に全地域で販売終了となる。 ただし、ある地域でCode Risk Analyzerの利用がない場合、その地域でのサービスは早期に終了する可能性があります。 詳細はこちら

IBM Cloud® コマンドラインインターフェース(CLI)は、コードリスク分析のためのコマンドを提供します。 IBM Cloud CLI を使用して、コードに脆弱性がないか、また特定のルールに準拠しているかどうかを分析できます。 コード・リスク・アナライザーは、ツールチェーンがサポートされているすべての IBM Cloud 地域で利用可能です。

CLIを使用して、以下のタスクを実行する:

  • すべてのサードパーティ製OSパッケージとアプリケーションパッケージの依存関係と利用可能なライセンス情報をリスト化した部品表(BOM)を作成します。 また、この出力を CycloneDX-specific。
  • BOMに記載されているパッケージの脆弱性を発見する。 また、生成されたレポートを CycloneDX-specific 形式で表示したり、 Node.js、Maven、 Gradle (Groovy) アプリケーションの脆弱性自動修復を使用することもできます。
  • Kubernetes ファイルを分析して、特定のルールに準拠しているかどうかを確認します。

2024年1月以降、Code Risk Analyzerは、営利企業Snyk Limitedのデータではなく、 オープンソースプロジェクトClairが提供する脆弱性データを消費する。 この変更に伴う特別な措置は必要ありません。 しかし、Code Risk Analyzerによって報告されたCVEの詳細については、いくつかの違いが見られるかもしれません。

サポートされる内容

Code Risk Analyzer は、Java™、Node.js、Python、および Go 言語をサポートします。 次の表は、Code Risk Analyzer がサポートする内容をリストして説明したものです。

サポートされる内容
内容 説明
Java このレポには、ビルド自動化のためにMavenまたは Gradle。 Mavenは依存関係を計算するために pom.xml ファイルを使用し、 Gradle は build.gradle(.kts) ファイルを使用する。 Code Risk Analyzerは、Mavenと Gradle (Groovy)の両方の修復を自動化することができます。
Node.js package-lock.json ファイルは依存関係を計算する。 Node.js、Code Riskアナライザーは修復を自動化することもできる。 インストールされているnpmのバージョンが、プロジェクトのnpmのバージョンと一致していることを確認する。
Python 依存関係は、 requirements.txtpyproject.toml ファイルを使って計算される。
Golang go mod および go dep 依存関係の管理をサポートします。 go mod の場合、go.sum ファイルがリポジトリー内に入っている必要があります。 go dep の場合、Gopkg.lock ファイルがリポジトリー内に入っている必要があります。
Dockerfile リポジトリー内の Dockerfile パターンのファイルが対象となります。 コンテナ・イメージでは、 Debian、 Red Hat Enterprise Linux®、 Alpine、 Ubuntu、 Linux ディストロがサポートされています。
Kubernetes 接尾部が .yaml.yml のファイルが対象となります。 kind の値は Pod, ReplicaSet, ReplicationController, Deployment, Daemonset, Statefulset, Job, CronJob, NetworkPolicy, または Ingress に設定する必要があります。
Calico 接尾部が .yaml.yml のファイルが対象となります。 kind の値は、 NetworkPolicyGlobalNetworkPolicyProfileNetworkSetGlobalNetworkSetHostEndpoint のいずれかに設定する必要があります。
Terraform Terraform プラン・ファイルは、Terraform プロバイダーとして IBM Cloud を使用して生成する必要があります。

Code Risk Analyzer は、リポジトリのソースコードとイメージの依存関係を検査し、脆弱性を検出します。 次の表は、Code Risk Analyzer が様々な種類の依存関係に対して参照する脆弱性情報のソースを示しています。

Code Risk Analyzer が脆弱性をチェックする依存関係をサポートしています。
依存関係 サポートされるバージョン セキュリティー上の注意事項のソース
Alpine イメージ ベンダーのセキュリティサポートがあるすべての安定版。 Alpine SecDB データベースがある。
Debian イメージ ベンダーのセキュリティサポートがあるすべての安定版。

linux-libc-dev のような、 Debian ソースパッケージ linux に関連するバイナリパッケージの CVE は報告されません。 これらのバイナリ・パッケージのほとんどはカーネルとカーネル・モジュールで、コンテナ・イメージでは実行されない。

Debian セキュリティ・バグ・トラッカー
GoogleContainerTools ディストリ画像 ベンダーのセキュリティサポートがあるすべての安定版。 GoogleContainerTools ディストロ
Red Hat® Enterprise Linux® (RHEL)イメージ RHEL 6、RHEL/UBI 7、RHEL/UBI 8、RHEL/UBI 9 Red Hat セキュリティデータAPI
Ubuntu イメージ ベンダーのセキュリティサポートがあるすべての安定版。 Ubuntu CVEトラッカー
Go、npm ( JavaScript )、Maven ( Java )、 PyPI ( Python )、 RubyGems ( Ruby )、Packagist (PHP) ベンダーのセキュリティサポートがあるすべての安定版。 オープンソースの脆弱性データベース

Code Risk Analyzer に関する既知の問題

Code Risk Analyzer は、バージョン管理スキームを使用しないアプリケーション・パッケージ (major.minor.patchなど) の脆弱性を検出できません。 例えば、リリース前のバージョンや、ビルド・メタデータを含むバージョンはサポートされません。

前提条件

  • IBM Cloud CLI をインストールします。 手順については、IBM Cloud CLI のダウンロードを参照してください。

  • 以下のコマンドを実行して、Code Risk Analyzer CLI プラグインをインストールします。

ibmcloud plugin install cra
  • サポートされているいずれかの地域のツールチェーンにアクセスできることを確認してください。 ツールチェーンにはツールは必要ありません。 ツールチェーンについて詳しくは、アプリからのツールチェーンの作成を参照してください。

  • TOOLCHAIN_ID環境変数を設定して、ツールチェーン ID を指定します。

export TOOLCHAIN_ID=e22195a5-11e3-44ba-9533-e7c18a3a61a7
  • 以下のコマンドを実行して、IBM Cloud の特定のリージョンにログインします。ここで、[region]は、ツールチェーンが作成されたリージョンです。
ibmcloud login -r [region]
  • オプションとして、CLI使用時にデータのコントロールとセキュリティを強化するために、 IBM Cloud エンドポイントへのプライベートルートを使用するオプションがあります。 まず、アカウントで仮想ルーティングと転送を有効にしてから、IBM Cloud プライベート・サービス・エンドポイントの使用を有効にする必要があります。 プライベート接続オプションをサポートするためにアカウントをセットアップする方法について詳しくは、VRF エンドポイントおよびサービス・エンドポイントの有効化を参照してください。

次のコマンドを使用して、プライベート・エンドポイントにログインする。 [region] はツールチェインが作成されたリージョンである。

ibmcloud login -a private.cloud.ibm.com -r [region]

CLI の使用方法を示すコマンド

IBM Cloud CLI およびプラグインの更新が使用可能になると、コマンド・ラインで通知を受け取ります。 最新のコマンドを使用できるように、CLI を最新の状態に保つようにしてください。 ibmcloud plugin listコマンドを実行すると、インストールされているすべてのプラグインの現行バージョンを表示できます。

Code Risk Analyzer のヘルプ

以下のコマンドは、Code Risk Analyzer コマンドのリストを表示します。

ibmcloud cra --help

Code Risk Analyzer コマンド・ヘルプ

次のコマンドは、コマンドで使用されるフラグの詳細を表示します。 使用可能なコマンドを表示するには、ibmcloud cra --helpを使用します。

ibmcloud cra <command> --help

部品表 (BOM)

bom-generateコマンドは、指定されたディレクトリー・パス内の成果物にアクセスし、ディープ・ディスカバリーを実行して、推移的な依存関係を含むすべての依存関係を識別します。 このコマンドは、これらの依存関係が配布されているライセンスも特定します。 すべての依存関係のスナップショットをキャプチャするBOMが作成されます。 BOM は、標準形式または CycloneDX's SBOM 形式で生成できます。

ibmcloud cra bom-generate

BOM コマンド要件

bom-generateコマンドは、特定の外部コマンドに依存します。

  • パスに Dockerfile が含まれている場合、このコマンドは、各 Dockerfile 内のすべてのビルド・ステージの基本イメージとビルド・イメージをプルダウンします。 このシナリオでは、bom-generateコマンドを使用するには、Docker cliコマンドとtarコマンドが使用可能である必要があります。
  • パスに Maven ファイルが含まれている場合、このコマンドはmvnを使用して依存関係のリストを作成します。 このシナリオでは、bom-generateコマンドを使用するには、mvnコマンドが使用可能になっている必要があります。
  • パスに Gradle ファイルが含まれている場合、このコマンドはgradleを使用して依存関係のリストを作成します。 このシナリオでは、bom-generateコマンドを使用するには、gradleコマンドが使用可能になっている必要があります。
  • パスに Node.js package-jsonファイルが含まれており、このコマンドを使用して対応するpackage-lock.jsonファイルを生成する場合、bom-generateコマンドはnpmを使用して package-lock.json ファイルを作成します。 このシナリオでは、コマンドはnpmコマンドが使用可能であることを必要とします。
  • パスに Python requirements.txt または pyproject.toml ファイルが含まれている場合、コマンドは pip を使用してパッケージの依存関係を生成します。 このシナリオでは、 bom-generate コマンドは、 pip コマンドが使用可能であることを必要とする。 Python バージョン 2 と Python バージョン 3 の両方がサポートされています。

Dockerfile を使用している場合は、必ず、基本イメージのプル元のコンテナー・レジストリーにログインしてください。

Dockerfile に ARGS が必要な場合は、コマンドを実行する前に、個々の ARG を環境変数として設定してください。 例えば、Dockerfile がIAM_USER ARG を使用している場合、IAM_USER: export IAM_USER='value'という名前の環境変数をエクスポートします。 CLI は、これらの環境変数をdocker buildコマンドに自動的に渡します。

DOCKERBUILDFLAGSフラグを明示的に指定することもできます。 ARGS Docker フラグを使用してDOCKERBUILDFLAGSをエクスポートするには、以下のコマンドを入力します。

export DOCKERBUILDFLAGS="--build-arg IAM_USER --build-arg API_KEY"

BOM コマンド・オプション

次の表は、 bom-generate コマンドで BOM を生成する際に使用できるコマンド・オプションの一覧です。

BOM生成のためのコマンドオプション
コマンド・オプション 必須またはオプション 説明
--path 必須 スキャンするプロジェクト・ディレクトリー・パス。
-r, --report 必須 BOM レポートを保管するためのファイル名。
-a, --asset-type オプション 実行するセキュリティー検査 (アプリ、イメージ、OS、すべて)。 デフォルトでは、このオプションはallに設定されています。 appsオプションは、ディスカバリーをアプリケーション・パッケージに制限するために使用します。 imageオプションは、Dockerfile 内で使用される基本イメージにディスカバリーを制限するために使用されます。 osオプションは、ディスカバリーを Dockerfile 内のビルド・ステージのみに制限するために使用します。 複数の値を指定するには、コンマを使用して値を区切ります (例: -a os,image,apps)。
-p, --prev-report オプション 前の BOM レポートを使用して、コマンドを高速化します。 例えば、最後のレポートが生成されてから Dockerfile が更新されていない場合、コマンドはその Dockerfile からのパッケージのディスカバリーをスキップします。 同じシナリオが、package-lock.jsonファイルなどの他のマニフェスト・ファイルにも適用されます。
-c, --dockerbuildcontext オプション 指定された場合、CRA はビルド・ステージのスキャン中に、path パラメーター内のディレクトリーを Docker ビルド・コンテキストとして使用します。
-o, --output オプション BOM レポート形式を選択します。 フォーマット出力は、標準 BOM フォーマット (standard) または CycloneDX の SBOM フォーマット (cyclonedx) のいずれかで生成できます。デフォルト値はstandardです。 各フォーマットをスペースなしでコンマで区切って入力することにより、両方のフォーマットを保管できます。
-f, --dockerbuildflags オプション ビルド・ステージ・スキャン用に Docker ビルド・コマンドをカスタマイズします。 このコマンド行フラグを使用する代わりに、DOCKERBUILDFLAGSという名前の環境変数に値を指定できます。 デフォルトでは、このコマンド・オプションは''に設定されています。 このオプションを使用する場合は、それがコマンドに指定された最後のフラグであることを確認してください。
-d, --dockerfilepattern オプション リポジトリー内の Dockerfile を識別するためのパターン。
-g, --gradle.excludeconfigurations オプション Gradle 構成を除外します (例: runtimeClasspath,testCompileClasspath)。 デフォルトでは、このコマンド・オプションは''に設定されています。
-l, --gradleprops オプション Gradle 依存性スキャン用のプロパティで Gradle コマンドをカスタマイズする。
-m, --maven.excludescopes オプション Maven スコープを除外します (例: test,compile)。 例: 'test,compile'。 デフォルトでは、このコマンド・オプションは''に設定されています。
-n, --nodejs.createpackagelock オプション node.js プロジェクトの package-lock.json ファイルをビルドするタスクを有効にします。
--region オプション ツールチェーンが配置されているibmcloudリージョン。
--toolchainid オプション 使用するターゲット・ツールチェーン ID。
-v, --verbose オプション 詳細ログ・メッセージを有効にします。

ファイルを無視します

パスに.cra/.fileignoreファイルが含まれている場合、.fileignoreファイルに指定されているファイルは依存関係についてスキャンされません。 .fileignore ファイルは、 .gitignore ファイルのルールに従わなければならない。 .gitignore ファイルと同様に、 .fileignore ファイルには、コメント、無視するディレクトリ、無視するファイル、その他の パターンを含めることができる。

以下の .fileignore ファイルの例では、bash スクリプト、node_modules、および Dockerfile を除外する方法を示しています。

# Ignore nested functional_tests directory
**/functional_tests

# Ignore bash scripts
**/*.sh

# This should allow this one file
!test/gatling_tests/loginTobx.sh

# Ignore node_modules
node_modules

# Exclude the dockerfile from scanning
Dockerfile

複数の Docker ビルドコンテキストを設定する

一つのプロジェクト内で複数のDockerfileを扱う場合、それぞれのDockerfileに別々のビルド・コンテキストを定義したい場合があります。 これは、 .cra/.dockerbuildcontext。Dockerfileのパスを対応するビルド・コンテキストにマッピングするJSONファイルである。

プロジェクト・ディレクトリに .cra/.dockerbuildcontext ファイルが存在する場合、CRA Docker ビルド・コマンドは、このファイルに指定されたパスを、関連するDockerfileのビルド・コンテキストとして使用します。 JSONオブジェクトのキーはDockerfileへの相対パスを表し、値はそれぞれのビルド・コンテキストへの相対パスを指定します。

以下は、複数のDockerfileに対して異なるビルド・コンテキストを定義する .dockerbuildcontext ファイルの例である:

{
  "Dockerfile": "./",
  "path/to/different/Dockerfile": "./another/Path"
}

以下のコード・スニペットは、bom-generateコマンドの使用方法を示しています。

ibmcloud cra bom-generate --path PATH --report REPORT [--asset-type ASSET-TYPE] [--dockerbuildcontext] [--dockerbuildflags DOCKERBUILDFLAGS] [--dockerfilepattern DOCKERFILEPATTERN] [--gradle.excludeconfigurations GRADLE.EXCLUDECONFIGURATIONS] [--maven.excludescopes MAVEN.EXCLUDESCOPES] [--nodejs.createpackagelock] [--prev-report PREV-REPORT] [--region REGION] [--toolchainid TOOLCHAINID] [--verbose]
ibmcloud cra bom --path . --report bomreport.json

脆弱点スキャン

vulnerability-scan コマンドは、 standard 形式の BOM を入力として受け取り、BOM に記載されているアプリケーション・パッケージや OS パッケージの脆弱性を検出します。 CVE(Common Vulnerabilities and Exposures:共通脆弱性・暴露)の複数のソースから収集された豊富な脅威インテリジェンスに基づき、標的型の修正勧告が提供されます。 Code Risk Analyzer は、 Node.js ベースのアプリケーションに限って、脆弱性のあるパッケージの自動修復を実行することもできます。 このレポートは、標準形式または CycloneDX's Vulnerability Exploitability Exchange (VEX) 形式で生成することもできます。

ibmcloud cra vulnerability-scan

脆弱性スキャン・コマンド・オプション

以下の表に、vulnerability-scanコマンドを使用するためのオプションをリストします。

脆弱性スキャンを実行するためのコマンド・オプション
コマンド・オプション 必須またはオプション 説明
-b, --bom 必須 bom-generate コマンドを使用して生成された BOM のファイルパス。 このBOMは standard 形式でなければならない。
-a, --autofix オプション 特定の種類のアプリの脆弱性を修正。 このオプションは、 Node.js、Maven、 Gradle アプリでのみ利用可能です。
-f, --commentfile オプション マークダウン・レポートが作成されるファイルを指定します。 このコマンドは autofix でのみ使用できる。
-c, --cveignore オプション 無視する CVE のリストが含まれている CVE 無視ファイルのファイル・パス。
-e, --excludedev オプション コマンドが開発の依存関係について CVE を報告しないように指定します。
--force オプション メジャーバージョンが異なる場合でも、トップレベル・ノード・パッケージのアップデートを強制します。 このコマンドは autofix でのみ使用できる。
--include-nofix オプション 既知の改善策がないCVEの報告を含めるか、または除外する。 デフォルトでは、このオプションはappに設定されています。 app オプションは、修正のないアプリパッケージのCVEのみを含めるために使用します。 os オプションは、OS パッケージの CVE のみを修正なしで含める場合に使用します。 all オプションは、アプリと OS パッケージの CVE を修正なしで含めるために使用します。 none オプションは、修正のないアプリと OS パッケージの CVE を除外するために使用します。
--path --autofix が有効な場合は必須 スキャンするプロジェクト・ディレクトリー・パス。 このコマンドは autofix でのみ使用できる。
--region オプション ツールチェーンの ibmcloud 領域。
-r, --report オプション 生成されたレポートへのパス。
-o, --output オプション CVE レポート・フォーマットを選択します。 フォーマット出力は、標準 CVE フォーマット (standard) または CycloneDX の VEX フォーマット (cyclonedx) のいずれかで生成できます。デフォルト値はstandardです。
-s, --strict オプション 脆弱性が検出されると、コマンドの失敗 (終了状況 2) になります。
--toolchainid オプション ターゲットツールチェーンのID。

脆弱性の無視

-cまたは--cveignoreパラメーターが指定されている場合、コマンドはそのファイルを検索し、ファイルに指定されている CVE を報告しません。 修復が使用可能になるまで、または指定された有効期限まで無期限に省略するように CVE を構成できます。

以下の例は、.cveignoreファイルの JSON スキーマを示しています。

[
    {
        "cve": "string",
	    "alwaysOmit": "bool",
	    "untilRemediationAvailable": "bool",
	    "expiration": "string"
    }
]

.cveignoreファイル内のエントリーごとに、以下のプロパティーがサポートされます。

  • cve - 除外する脆弱性。 このプロパティの値はCVE IDである。
  • alwaysOmit - このプロパティーがtrueに設定されている場合、脆弱性は変更されるまで除外されます。 このプロパティーは、他のプロパティー値より優先されます。
  • untilRemediationAvailable - このプロパティーがtrueに設定されている場合、修復パスが使用可能になるまで脆弱性は省略されます。 修復が利用可能になると、脆弱性は除外されずにメッセージが表示されます。 このプロパティーは、有効期限日のプロパティー値より優先されます。
  • 有効期限 - このプロパティーがtrueに設定されていて、有効期限に達していない場合、脆弱性は省略されます。 有効期限日に達すると、脆弱性は除外されずにメッセージが表示されます。 このプロパティーを定義するには、RFC3339 時刻形式 (yyyy-MM-ddTHH:mm:ss[+-]Z) を使用します。

Code Risk Analyzer は、これらの定義済みのプロパティーのみを使用します。 プロパティーを追加しても、機能には影響を及ぼしません。 .cveignore に定義された脆弱性が除外されない場合、その理由を説明するログが生成されます。 .cveignore ファイルに定義された脆弱性が除外された場合、その個々のログは表示されません。 レポートの完了後に、除外の数、および除外された脆弱性 ID とパッケージ名のリストがログに記録されます。

以下のコード・スニペットは、.cveignoreファイルの例を示しています。

[
    {
        "cve": "CVE-2021-27290",
        "alwaysOmit": true
    },
    {
        "cve": "CVE-2020-8244",
        "untilRemediationAvailable": true,
    }
]

以下のコード・スニペットは、vulnerability-scanコマンドの使用方法を示しています。

ibmcloud cra vulnerability-scan --bom BOM [--cveignore CVEIGNORE] [--report REPORT] [--excludedev] [--include-nofix app,os,all,none] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--output OUTPUTFILE]
ibmcloud cra cve --bom ./bom-file.json --cveignore ./cveignore-example.json --report ./output-vulnerability-report.json --excludedev --include-nofix all --strict

デプロイメント

deployment-analyzeコマンドは、Kubernetes デプロイメント・マニフェストに対して構成チェックを実行します。

ibmcloud cra deployment-analyze

このコマンドは、 Docker コンテナの安全な構成態勢を確立するための規定ガイダンスを提供する。 Code Risk Analyzer は、これらのセキュリティ構成を参照ポイントとして使用し、 Kubernetes アプリケーションのデプロイメント成果物( .yaml ファイルなど)でチェックすべきセキュリティ制御を特定する。 このコマンドは、各コントロールの失敗に対するリスク評価も提供する。

次の表は、 CIS Docker 1.13.0 から確認した、 DevSecOps, 内で実装できるコントロールの一覧です。 Kubernetes Common Configuration Scoring System(KCCSS )のオープンソースリファレンスに基づいて、より多くのコントロールが追加されている。

セキュリティー・コントロール
ID ルール リスク
5.3 コンテナが CAP_SYS_ADMIN の機能を持っていないことを確認する。
5.3 コンテナが CAP_NET_RAW の機能を持っていないことを確認する。
5.4 特権的なコンテナが使用されていないことを確認する。
5.5 機密性の高いホストシステムのディレクトリがコンテナにマウントされないようにする。
5.7 特権ポートがコンテナ内にマッピングされていないことを確認する。
5.9 ホストのネットワーク・ネームスペースが共有されていないことを確認する。
5.10 コンテナのメモリ使用量が制限されていることを確認する。
5.11 コンテナに適切なCPU優先度が設定されていることを確認する。
5.12 コンテナのルートファイルシステムが読み取り専用でマウントされていることを確認する。
5.15 ホストのプロセス・ネームスペースが共有されていないことを確認する。
5.16 ホストのIPCネームスペースが共有されていないことを確認する。
5.31 Docker ソケットがコンテナの内側に取り付けられていないことを確認してください。
コンテナがCPUリソースの安全でない割り当てを許可しないようにする。
コンテナが特権の昇格を許さないようにする。
容器が /proc の安全でない部分を露出しないようにする。
コンテナが共有ホスト・ポートを通じて公開されないようにする。

デプロイメント・コマンド・オプション

以下の表に、deployment-analyzeコマンドに使用できるコマンド・オプションをリストします。

配備分析のコマンドオプション。
コマンド・オプション 必須またはオプション 説明
--path 必須 スキャンするプロジェクト・ディレクトリー・パス。
-r, --report 必須 レポートの作成に使用するファイル名。
-f, --fileignore オプション .fileignoreファイルのファイル・パス。
-s, --strict オプション デプロイメント・リスクが検出されたときのコマンド失敗 (終了状況 2) の結果。

以下のコード・スニペットは、deployment-analyzeコマンドの使用方法を示しています。

ibmcloud cra deployment-analyze --path PATH --report REPORT [--fileignore FILE_IGNORE] [--strict]
ibmcloud cra depl --path ./sampleDir --report deployment-report.json --strict

NetworkPolicy 分析

これは評価およびテストを目的として提供されているベータ版機能です。

netpol-analyze コマンドは Kubernetes および Calico NetworkPolicy マニフェストに対して構成チェックを実行します。

ibmcloud cra netpol-analyze

このコマンドは、 Kubernetes アプリケーションの接続構成の状態を NIST SP 800-53 SC-7(5)制御に照らしてチェックします。 すべてのワークロードの接続性が、少なくとも1つのリソース( NetworkPolicy )によって制御され、非セキュアポートがイングレスとイグレスの両方でブロックされていることを検証する。

netpol-analyze コマンドは、スキャンされたアプリケーションの接続性レポートも提供し、アプリケーションのワークロード 間で許可されたすべての接続を表示することができます。 このレポートは、コンプライアンス遵守の証拠として、または接続性の問題のデバッグに使用することができます。 このコマンドを使用して、スキャンしたネットワーク・ポリシーの lint 結果を提供し、その結果を使用してネットワーク・ポリシーの効率と可読性を向上させることもできます。 場合によっては、lintの結果がネットワーク・ポリシーの定義にエラーがあることを示すこともある。

NetworkPolicy 分析コマンドのオプション

以下の表に、netpol-analyzeコマンドに使用できるコマンド・オプションをリストします。

ネットワーク・ポリシー分析を実行するためのコマンド・オプション
コマンド・オプション 必須またはオプション 説明
--path 必須 スキャンするプロジェクト・ディレクトリー・パス。
-r, --report 必須 コンプライアンス・レポートを作成するファイル名。
-c, --connectivity オプション 接続性レポートを作成するファイル名。
-l, --lint オプション リント・レポートを作成するファイル名。
-s, --strict オプション 接続性のリスクが見つかった場合、コマンドは失敗(終了ステータス 2)。

以下のサンプル・コード・スニペットは、 netpol-analyze コマンドの使い方を示しています:

ibmcloud cra netpol-analyze --path PATH --report REPORT [--connectivity CONNFILE] [--lint LINTFILE] [--strict]
ibmcloud cra np --path ./sampleDir --report netpol-report.json --strict

ネットワーク・コンフィグ・アナライザー・イメージ

netpol-analyze コマンドは、 IBM の Network Config Analyzer(NCA) の一部として実行される。 このコマンドはNCAを Docker イメージとして実行するため、コンピュータにインストールする必要があります。 Docker をインストールする必要があります。

ネットワークポリシーアナライザーの画像 URL は icr.io/continuous-delivery/cra/nca.

アナライザー・イメージがローカル・レジストリにまだない場合、 netpol-analyze コマンドは、グローバル IBM Cloud® Container Registry から最新のアナライザー・イメージ (脆弱性の修正を含む) を取得します。

Tekton パイプラインでの Code Risk Analyzer の使用

タスクは task-cra タスクをTektonパイプラインで使用できる。 Tektonパイプライン定義は、プルリクエスト、手動トリガー、コミットを作成する際に使用します。 独自の Tekton タスクを作成し、それらのタスクから Code Risk Analyzer を実行することもできます。

DevSecOps での Code Risk Analyzer の使用

Code Risk Analyzer は、DevSecOpsで使用できます。 以下の表では、DevSecOps でサポートされる Code Risk Analyzer パラメーターをリストし、説明しています。

bom-generateコマンドを実行するためにパイプライン・イメージが必要とする従属ユーティリティー・コマンドについて詳しくは、BOM 要件を参照してください。 コマンドが欠落している場合は、cra-custom-script-pathパラメーターを使用して、それらのコマンドをインストールするスクリプトを参照できます。

DevSecOps コード・リスク・アナライザーに基づくパラメータ
名前 タイプ 説明 必須またはオプション
artifactory-dockerconfigjson シークレット artifactory の資格情報を保管する Base64 エンコードの Docker config.json ファイル。 オプション
baseimage-auth-user テキスト Code Risk Analyzer スキャンで必要とされるアプリケーション Dockerfile の基本イメージの資格情報。 オプション
baseimage-auth-email テキスト Code Risk Analyzer スキャンで必要とされるアプリケーション Dockerfile の基本イメージの資格情報。 オプション
baseimage-auth-host テキスト Code Risk Analyzer スキャンで必要とされるアプリケーション Dockerfile の基本イメージの資格情報。 オプション
baseimage-auth-password シークレット Code Risk Analyzer スキャンで必要とされるアプリケーション Dockerfile の基本イメージの資格情報。 オプション
cra-cveignore-path テキスト アプリケーション・リポジトリーのルートを基準とした、cveignoreファイルへの相対パス。 デフォルトのファイル・パスは .cra/.cveignore です。 オプション
cra-custom-script-path テキスト Code Risk Analyzer スキャン前に実行されるカスタム・スクリプトへのパス。 このスクリプトは、Code Risk Analyzer BOM ツールのコンテキストでENV変数を設定するオプションを提供するために提供されています。 オプション
cra-docker-buildflags テキスト ビルド・ステージ・スキャン用のカスタム Docker ビルド・コマンド。 このパラメーターは、デフォルトでは空です。 オプション
cra-docker-build-context テキスト 指定された場合、Code Risk Analyzer は、パス・パラメーター内のディレクトリーを Docker ビルド・コンテキストとして使用します。 オプション
cra-exclude-devdependencies テキスト スキャンから開発依存関係を除外するかどうかを指定します (true または false)。 デフォルト値はfalseです。 オプション
cra-gradle-exclude-configs テキスト スキャンで依存関係を除外する Gradle 構成を指定します。 例えば、runtimeClasspath,testCompileClasspath です。 このパラメーターは、デフォルトでは空です。 オプション
cra-maven-exclude-scopes テキスト スキャンから依存関係を除外する Maven スコープを指定します。 例えば、test,compile です。 このパラメーターは、デフォルトでは空です。 オプション
cra-nodejs-create-package-lock テキスト Code Risk Analyzer ディスカバリーを有効にすると、node.js リポジトリーのpackage-lock.jsonファイルを作成できるようにします。 このパラメーターは、デフォルトではfalseに設定されています。 オプション
ibmcloud-api-key シークレット ibmcloud CLI ツールと対話するための IBM Cloud® API キー。 必須
pipeline-dockerconfigjson シークレット プライベート・レジストリーからイメージをプルするための Base64 エンコードの Docker config.json ファイル。 オプション
onepipeline-dockerconfigjson シークレット 非推奨。 プライベート・レジストリーからイメージをプルするための Base64 エンコードの Docker config.json ファイル。 オプション
pipeline-debug 選択 パイプラインのデバッグ・モードのスイッチ。 オプション
オプトイン・クラ自動修復 テキスト Code Risk Analyzer が cra auto remediation コマンド (true または false) を実行できるようにする。 デフォルト値は falseです。 このコマンドは、Continuous Compliance Pipelineでのみサポートされています。 オプション
オプトイン・クラ自動修復有効レポ テキスト cra auto remediation コマンドで有効にするコンマ区切りのリポジトリ名のリストを指定します。 このパラメータは、 opt-in-cra-auto-remediationtrue に設定されている場合にのみ考慮され、継続的コンプライアンス・パイプラインでのみサポートされる。 オプション
オプトイン・クラ自動修復力 テキスト メジャーバージョンが現在の脆弱性パッケージのバージョン(true または false)と異なっていても、 cra auto remediation コマンドでパッケージを強制的にアップデートします。 このパラメータは、 opt-in-cra-auto-remediationtrue に設定されている場合にのみ考慮され、継続的コンプライアンス・パイプラインでのみサポートされる。 オプション

DevSecOps 用のカスタム・スクリプトの例

Dockerfile に ARGS が必要な場合は、コマンドを実行する前に、cra-custom-script-pathパラメーターを使用して個々の ARG を環境変数として設定できます。 カスタム・スクリプト・パスは、ユーザーのプロジェクトにあるスクリプトへのパスです。 例えば、Dockerfile がIAM_USER ARGを使用している場合、IAM_USER: export IAM_USER='value'という名前のスクリプト内に環境変数をエクスポートします。 Dockerfile で必要な ARG がツールチェーン内の環境プロパティーとして設定されている場合は、get_envを使用して値を取得できます。 この場合、IAM_USER: export IAM_USER=$(get_env iam_user_environment_property_name)スクリプト内の環境変数をエクスポートできます。 run-craタスクは、これらの環境変数を自動的に取得して、Docker ビルド・コマンドに渡します。

以下の例は、cra-custom-scriptを使用してENV変数をエクスポートする方法を示しています。

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

export IAM_USER=$(get_env iam_user_environment_property_name)

cra-custom-script-pathパラメーターは、プロジェクトに基づいて、DevSecOps 基本イメージ・ツールのバージョンが古くなっている可能性があるシナリオにも使用できます。 例えば、新しい pip バージョンを必要とする Python パッケージを検出するために、pip/pip3などのコマンドを更新できます。

以下の例は、cra-custom-scriptを使用して pip バージョンを更新する方法を示しています。

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

python3 -m pip install --upgrade pip

Dockerfile でプライベート Docker レジストリーのイメージを使用する場合は、cra-custom-script-pathパラメーターを使用して、Code Risk Analyzer を実行する前にプライベート Docker レジストリーに対する認証を行い、Code Risk Analyzer がこのイメージをスキャン用にプルできるようにすることができます。

以下の例は、cra-custom-scriptを使用してibmcloudコンテナー・レジストリーに対する認証を行う方法を示しています。

#!/usr/bin/env bash

if [[ "${PIPELINE_DEBUG:-0}" == 1 ]]; then
    trap env EXIT
    env | sort
    set -x
fi

ibmcloud cr login

DevSecOps での Code Risk Analyzer のデバッグ

デバッグを支援するために、独自のローカル・マシンで Code Risk Analyzer をコマンド・ライン・インターフェース (CLI) としてローカルに実行できます。 BOMを生成するための ibmcloud cra bom-generate コマンドの実行については、 部品表(BOM )を参照。 BOMを生成した後、 ibmcloud cra cve コマンドを使用して脆弱性をリストアップする。 ibmcloud cra cveコマンドの実行について詳しくは、脆弱点スキャンを参照してください。

run-craタスクにエラーがないことを確認してください。 タスクにエラーが含まれている場合は、パイプラインが現行バージョンの DevSecOps を使用しているかどうかを確認してください。 DevSecOps のバージョンを確認しても問題が解決しない場合は、以下の例で、いくつかの一般的なエラーと提案された解決策を示します。

FAILED
Error executing docker pull cmd: [docker pull us.icr.io/opentoolchain/ibmnode:14ubisecure]

プライベート・レジストリーへのアクセス権限があることを確認できます。 アクセス権限がない場合は、cra-custom-script-pathパラメーターを使用して、プライベート・レジストリーに対して認証するために Code Risk Analyzer の前に実行するカスタム・スクリプトへのパスを指定できます。

FAILED
Error executing docker build cmd for stage-0: exit status 1

Dockerfile で ARGS が必要な場合、ARGS が欠落しているため、ビルド・ステージのdocker buildコマンドはビルドに失敗します。 ARGS を環境変数としてセットアップするには、cra-custom-script-pathが必要です。 カスタム・スクリプトのセットアップについて詳しくは、DevSecOps 用のカスタム・スクリプトの例を参照してください。

FAILED
Error executing docker build cmd for stage-0: exit status 1
...
COPY file-to-copy.js file-to-copy.js:
------
failed to compute cache key: "/file-to-copy.js" not found: not found

デフォルトでは、Code Risk Analyzer のbom-generateコマンドは、Dockerfile 自体のロケーションのコンテキストから Dockerfile をビルドします。 ルート・プロジェクト・ディレクトリーのコンテキストから Dockerfile をビルドする場合は、cra-docker-build-contextパラメーターを使用して、Code Risk Analyzer がこのコンテキストから Dockerfile をビルドできるようにします。

保管されている Code Risk Analyzer データの削除

Code Risk Analyzer プラグインは、クライアント・データをそのデータベースに保管しません。 ただし、以前のバージョンの Code Risk Analyzer Tekton タスクでは、脆弱性スキャンの結果がデータベースに安全に保管されていました。

Code Risk Analyzerに保存されている可能性のある顧客データの削除を依頼する場合は、 IBM サポートまでご連絡ください。

FAQ

Code Risk Analyzer CLI の使用に関するよくある質問に対する回答をご覧ください。

CLI が失敗した理由を判別するにはどうすればよいですか?

Code Risk Analyzer CLI を呼び出す前に、IBMCLOUD_TRACE環境変数を true に設定してデバッグ・ログをオンにします。

export IBMCLOUD_TRACE=true

ログに示されている API 呼び出しと応答を監視して、失敗の正確な理由を判別してください。

プライベート・レジストリーから基本イメージをプルできない BOM コマンドをデバッグする方法を説明します。

ibmcloud cr loginコマンドまたはdocker loginコマンドを使用して、基本イメージが存在するレジストリーで認証されていることを確認します。

Dockerfile の分析に失敗した BOM コマンドをデバッグするにはどうすればよいですか?

  • docker buildコマンドを実行し、成功することを確認して、Dockerfile に問題がないことを確認します。
  • Dockerfile で ARG を渡す必要がある場合は、ARG が環境変数として設定されていることを確認してください。 DOCKERBUILDFLAG環境変数を使用することもできます。
  • 基本イメージを含むレジストリーで認証します。

予想外の偽陽性の結果が出ている。 どうすればよいですか?

DevSecOps 継続的デプロイメント(CD)パイプラインを実行して、エビデンスロッカーに更新されたSBOMを生成する。 これは、 DevSecOps 継続的コンプライアンス(CC)パイプラインによって生成された古いSBOMの存在に起因する、偽陽性の潜在的な原因に対処する可能性がある。

報告書や問題の重大度が、関連する脆弱性リンクの重大度と異なるのはなぜですか?

最近、脆弱性情報のソースが変更されたため、特定の脆弱性に関連する深刻度が変更されていることがあります。 Code Risk Analyzer は、全ての脆弱性の原因の計算に基づいて、最適な重大度を決定します。