IBM Cloud 用の Code Risk Analyzer プラグイン
IBM Cloud® コマンドラインインタフェース(CLI)は、コードリスク分析用のコマンドを提供する。 IBM Cloud CLI を使用して、コードに脆弱性がないか、また特定のルールに準拠しているかどうかを分析できます。 コード・リスク・アナライザーは、ツールチェーンがサポートされているすべての IBM Cloud 地域で利用可能です。
CLIを使用して、以下のタスクを実行する:
- すべてのサードパーティ製OSパッケージとアプリケーションパッケージの依存関係と利用可能なライセンス情報をリスト化した部品表(BOM)を作成します。 また、この出力を CycloneDX-specific。
- BOMに記載されているパッケージの脆弱性を発見する。 また、生成されたレポートを CycloneDX-specific 形式で表示したり、 Node.js、Maven、 Gradle (Groovy) アプリケーションの脆弱性自動修復を使用することもできます。
- 特定のルールに準拠しているかどうか Terraform プランを分析します。
- 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.txt と pyproject.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 の値は、 NetworkPolicy 、 GlobalNetworkPolicy 、 Profile 、 NetworkSet 、 GlobalNetworkSet 、 HostEndpoint のいずれかに設定する必要があります。 |
Terraform | Terraform プラン・ファイルは、Terraform プロバイダーとして IBM Cloud を使用して生成する必要があります。 |
Code Risk Analyzer は、リポジトリのソースコードとイメージの依存関係を検査し、脆弱性を検出します。 次の表は、Code Risk Analyzer が様々な種類の依存関係に対して参照する脆弱性情報のソースを示しています。
依存関係 | サポートされるバージョン | セキュリティー上の注意事項のソース |
---|---|---|
Alpine イメージ | ベンダーのセキュリティサポートがあるすべての安定版。 | Alpine SecDB データベースがある。 |
Debian イメージ | ベンダーのセキュリティサポートがあるすべての安定版。
|
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 を生成する際に使用できるコマンド・オプションの一覧です。
コマンド・オプション | 必須またはオプション | 説明 |
---|---|---|
--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
Terraform アナライザー
terraform-validate
コマンドを使用して、Terraform プランを環境に適用する前に、そのプランの準拠性を分析できます。 このコマンドは、指定されたTerraformプランファイルを分析し、 IBM Cloud® Security and Compliance Center で指定されたルールに準拠しているかどうかを調べます。 このコマンドは、コンプライアンス・レポートを生成します。
検証に使用するルールとパラメータをリストしたポリシーファイルを指定することができる。 ポリシーファイルが指定されない場合、このコマンドは、デフォルトのルールセットのプランを分析します。
ibmcloud cra terraform-validate
Terraform コマンド・オプション
以下の表に、terraform-validate
コマンドに使用できるオプションをリストします。
コマンド・オプション | 必須またはオプション | 説明 |
---|---|---|
-r , --report |
必須 | 生成されたレポートへのパス。 |
-t , --tf-plan |
必須 | 入力 Terraform プラン・ファイルへのパス。 |
-p , --policy-file |
オプション | ポリシープロファイルのファイルパス。 このフラグは、 Security and Compliance Center V2 プロファイルか、 Security and Compliance Center ルールのセットを持つカスタム JSON ファイルを受け取ることができる。 |
-q , --quiet |
オプション | 要約された情報のみを表示します。 |
-s , --strict |
オプション | ポリシーが失敗した場合のコマンド失敗 (終了状況 2) の結果。 |
-v , --verbose |
オプション | 失敗したルールのリストの後に、合格した Security and Compliance Center ルールのリストを表示します。 |
-a , --attachment-file |
オプション | このフラグは、 Security and Compliance Center V2 添付ファイル用のJSONを持つファイルを受け付ける。 このフラグを使用するには、 -p フラグで Security and Compliance Center V2 プロファイルを指定しなければならない。 |
例
以下のコード・スニペットは、terraform-validate
コマンドの使用方法を示しています。
ibmcloud cra terraform-validate --tf-plan TFPLANFILE --report REPORT [--policy-file POLICYFILE] [--quiet] [--region REGION] [--strict] [--toolchainid TOOLCHAINID] [--verbose] [--attachment-file ATTACHMENT_FILE]
ibmcloud cra tf -r report-user-profile.json -t ./tfplan.json -p ./user-profile.json --verbose
terraform-validate
コマンドの Terraform プラン・ファイルの例
{
"format_version": "0.2",
"terraform_version": "1.0.2",
"planned_values": {
"root_module": {
"child_modules": [
{
"resources": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"sensitive_values": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
],
"address": "module.instance"
},
{
"resources": [
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"schema_version": 0,
"values": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"sensitive_values": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
],
"address": "module.instance_config"
}
]
}
},
"resource_changes": [
{
"address": "module.instance.ibm_resource_instance.cos_instance",
"module_address": "module.instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"location": "global",
"parameters": null,
"plan": "lite",
"service": "cloud-object-storage",
"timeouts": null
},
"after_unknown": {
"account_id": true,
"allow_cleanup": true,
"created_at": true,
"created_by": true,
"crn": true,
"dashboard_url": true,
"deleted_at": true,
"deleted_by": true,
"extensions": true,
"guid": true,
"id": true,
"last_operation": true,
"locked": true,
"name": true,
"plan_history": true,
"resource_aliases_url": true,
"resource_bindings_url": true,
"resource_controller_url": true,
"resource_crn": true,
"resource_group_crn": true,
"resource_group_id": true,
"resource_group_name": true,
"resource_id": true,
"resource_keys_url": true,
"resource_name": true,
"resource_plan_id": true,
"resource_status": true,
"restored_at": true,
"restored_by": true,
"scheduled_reclaim_at": true,
"scheduled_reclaim_by": true,
"service_endpoints": true,
"state": true,
"status": true,
"sub_type": true,
"tags": true,
"target_crn": true,
"type": true,
"update_at": true,
"update_by": true
},
"before_sensitive": false,
"after_sensitive": {
"extensions": {},
"last_operation": {},
"plan_history": [],
"tags": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[0]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 0,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
},
{
"address": "module.instance_config.ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration[1]",
"module_address": "module.instance_config",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"index": 1,
"provider_name": "registry.terraform.io/ibm-cloud/ibm",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"activity_tracking": [],
"allowed_ip": null,
"archive_rule": [],
"cross_region_location": null,
"endpoint_type": "public",
"expire_rule": [],
"force_delete": true,
"key_protect": null,
"metrics_monitoring": [],
"region_location": "us-south",
"retention_rule": [],
"single_site_location": null,
"storage_class": "standard",
"timeouts": null
},
"after_unknown": {
"activity_tracking": [],
"archive_rule": [],
"bucket_name": true,
"crn": true,
"expire_rule": [],
"id": true,
"metrics_monitoring": [],
"resource_instance_id": true,
"retention_rule": [],
"s3_endpoint_private": true,
"s3_endpoint_public": true
},
"before_sensitive": false,
"after_sensitive": {
"activity_tracking": [],
"archive_rule": [],
"expire_rule": [],
"metrics_monitoring": [],
"retention_rule": []
}
}
}
],
"configuration": {
"provider_config": {
"ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance",
"expressions": {
"ibmcloud_api_key": {
"constant_value": "BYwB2M3TJdDMlCpHaxaWilNHVod05TVkqjIbGqrlm9Iz"
}
}
},
"module.instance_config:ibm": {
"name": "ibm",
"version_constraint": "1.25.0",
"module_address": "module.instance_config"
}
},
"root_module": {
"module_calls": {
"instance": {
"source": "./instance_module",
"module": {
"outputs": {
"cos_instance_id": {
"expression": {
"references": [
"ibm_resource_instance.cos_instance.id",
"ibm_resource_instance.cos_instance"
]
}
}
},
"resources": [
{
"address": "ibm_resource_instance.cos_instance",
"mode": "managed",
"type": "ibm_resource_instance",
"name": "cos_instance",
"provider_config_key": "instance:ibm",
"expressions": {
"location": {
"constant_value": "global"
},
"name": {},
"plan": {
"constant_value": "lite"
},
"service": {
"constant_value": "cloud-object-storage"
}
},
"schema_version": 0
}
]
}
},
"instance_config": {
"source": "./instance_config_module",
"expressions": {
"cos_instance_id": {
"references": [
"module.instance.cos_instance_id",
"module.instance"
]
}
},
"module": {
"resources": [
{
"address": "ibm_cos_bucket.bad_resource_cos_bucket_missing_all_configuration",
"mode": "managed",
"type": "ibm_cos_bucket",
"name": "bad_resource_cos_bucket_missing_all_configuration",
"provider_config_key": "instance_config:ibm",
"expressions": {
"bucket_name": {},
"region_location": {
"constant_value": "us-south"
},
"resource_instance_id": {
"references": [
"var.cos_instance_id"
]
},
"storage_class": {
"constant_value": "standard"
}
},
"schema_version": 0,
"count_expression": {
"constant_value": 2
}
}
],
"variables": {
"cos_instance_id": {
"description": "COS Instance ID"
}
}
},
"depends_on": [
"module.instance"
]
}
}
}
}
}
例 SCC terraform-validate
コマンド用 V2 プロファイル・ファイル・スキーマ
{
"title": "User Profile Standard v2 Schema",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"profile_name": {
"type": "string"
},
"profile_version": {
"type": "string"
},
"controls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"control_specifications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_count": {
"type": "number"
},
"assessments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_method": {
"type": "string"
},
"assessment_description": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_count": {
"type": "number"
},
"parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"parameter_name": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
}
}
},
"default_parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assessment_type": {
"type": "string"
},
"assessment_id": {
"type": "string"
},
"parameter_name": {
"type": "string"
},
"parameter_default_value": {
"type": "string"
},
"parameter_display_name": {
"type": "string"
},
"parameter_type": {
"type": "string"
}
}
}
}
},
"required": ["default_parameters", "controls", "profile_name", "profile_version"]
例 SCC terraform-validate
コマンド用 V2 クラシック・プロファイル・ファイル
ルールIDの前に rule-
を付けることができる。
{
"schema_version": "2.0",
"scc_rules": [
{
"scc_rule_id": "548a3321-6a39-400c-9c2d-0df9a13afd02"
},
{
"scc_rule_id": "726ec899-505e-4de9-ac1b-9578ef62f89f"
},
{
"scc_rule_id": "962e2bde-2a4f-4e07-a352-ce17708b1e85"
},
{
"scc_rule_id": "9653d2c7-6290-4128-a5a3-65487ba40370"
},
{
"scc_rule_id": "d8d13c3e-5ca0-46c5-a055-2475852c4ec6"
},
{
"scc_rule_id": "0f7e7e60-a05c-43a7-be74-70615f14a342"
},
{
"scc_rule_id": "979fd713-d39f-4efe-ba02-bf6fc07e57bb"
},
{
"scc_rule_id": "rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379"
},
{
"scc_rule_id": "caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
},
{
"scc_rule_id": "rule-1edc74ae-0dad-4ea1-865d-89e3214d240f"
},
{
"scc_rule_id": "064d9004-8728-4988-b19a-1805710466f6"
},
{
"scc_rule_id": "rule-caf5e45d-ccc8-4e35-b124-e1b4c8bcab71"
}
],
"scc_parameters": {
"ibm_minimum_password_length": 12,
"ibm_password_reuse_prevention": 4,
"allowed_admins_per_account": "10",
"api_keys_rotated_days": 90,
"account_owner_last_login_days": 30,
"no_of_admins_for_iam": 3,
"no_of_service_id_admins_for_iam": 3,
"no_of_managers_for_iam": 0,
"no_of_service_id_managers_for_iam": 0,
"iam_service_ids_max_count": 3,
"ssh_port": 25,
"rdp_port": 3390,
"no_pre_shared_key_characters": 30,
"dns_port": 60,
"vm_nic_count": 1,
"no_of_admins_for_container_registry ": 3,
"no_of_service_id_admins_for_container_registry": 3,
"no_of_managers_for_container_registry": 0,
"no_of_service_id_managers_for_container_registry": 0,
"access_tokens_expire": 120
}
}
Security and Compliance Center 規則
Terraform Analyzerは以下の Security and Compliance Center ルールに対応している:
rule-f8722625-1968-4d7a-93cb-4b0f8da726da - Check whether IBMid password policy requires at least one uppercase letter
rule-789cb35b-5bdf-46d3-8b59-e1377e3b211c - Check whether IBMid password policy requires at least one lowercase letter
rule-81b36ae4-0f15-41c7-adac-fa9586ff46ab - Check whether IBMid password policy requires at least one number
rule-979fd713-d39f-4efe-ba02-bf6fc07e57bb - Check whether IBMid password policy requires minimum length of 12 characters
rule-e76a3a81-b0d0-41fc-947d-13dc9cfff379 - Check whether IBMid password policy prevents password reuse below the minimum of #
rule-759d504b-9eed-4602-8b5b-7244bf3f5690 - Check whether IBMid password can contain only printable ASCII characters (in the range 33 - 126)
rule-bcbd57e1-3cdc-4b6d-820b-2c63bc777e19 - Check whether IBMid password policy contains spaces or any of the following characters: ;:("?)<>
rule-fa06f6f2-b98e-49ac-aa55-d57de9e320d3 - Check whether IBMid uses a password meter that coaches users to create strong passwords that exceed the minimum requirements
rule-548a3321-6a39-400c-9c2d-0df9a13afd02 - Check whether IAM roles are used to create IAM policies for IBM resources
rule-726ec899-505e-4de9-ac1b-9578ef62f89f - Check whether a support role has been assigned in IAM to manage cases in the IBM Cloud Support Center
rule-962e2bde-2a4f-4e07-a352-ce17708b1e85 - Check whether API keys are not created in IAM during the initial setup of IAM users
rule-61fa114a-2bb9-43fd-8068-b873b48bdf79 - Check whether IAM users are attached to at least one access group
rule-4d86c074-097e-4ff3-a763-ccff128388e2 - Check whether multifactor authentication (MFA) is enabled at the account level
rule-0704e840-e443-4781-b9be-ec57469d09c1 - Check whether permissions for API key creation are limited and configured in IAM settings for the account owner
rule-d61c20c9-c0be-443b-af0c-0d900601e154 - Check whether Cloud Object Storage public access is disabled in IAM settings (not applicable to ACLs managed using S3 APIs)
rule-0244c010-fde6-4db3-95aa-8952bd292ac3 - Check whether permissions for service ID creation are limited and configured in IAM settings for the account owner
rule-ed64fa73-81e5-4920-8519-acfad845dd6c - Check whether Identity and Access Management (IAM) is enabled with audit logging
rule-b2232217-34a6-4fe8-a791-5903f1cc89ca - Check whether Cloud Shell is disabled in account settings
rule-10de7433-19e4-40a7-aebf-eddf1f75a68c - Check whether Cloud Object Storage is enabled with encryption
rule-7c86bb59-d677-422d-875c-0259053fad20 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-222d6531-1fc7-4485-8771-35eb46c78877 - Check whether Cloud Object Storage is accessible only through HTTPS
rule-7c52a1ce-26cd-4cde-baa7-3bfb3703cf74 - Check whether Cloudant is accessible only through HTTPS
rule-f6197ee2-31bf-4d73-aacd-316c41a48df3 - Check whether Cloud Object Storage is accessible only by using private endpoints
rule-8cbd597c-7471-42bd-9c88-36b2696456e9 - Check whether Cloud Object Storage network access is restricted to a specific IP range
rule-c97259ee-336d-4c5f-b436-1868107a9558 - Check whether Cloud Object Storage is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-ef1db4bb-2490-48a9-883c-a20fea3db0e5 - Check whether Databases for MongoDB is enabled with encryption
rule-7f7ca588-9412-40a9-9bd8-0e5d19141e98 - Check whether Databases for MongoDB is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-77b99b6f-51dc-4290-b20c-7003941c7a46 - Check whether Databases for MongoDB is accessible only through HTTPS
rule-7b210b18-f849-4fa8-bd92-8e47921de51d - Check whether Databases for MongoDB is accessible only by using private endpoints
rule-c58bb2b9-7942-45ab-b9d4-e39c8430f570 - Check whether Databases for Redis is enabled with encryption
rule-e3cad136-17a8-4227-b8af-0be609da1da0 - Check whether Databases for Redis is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-90e3908d-27c3-4050-bb12-413dfc606f5c - Check whether Databases for Redis is accessible only through HTTPS
rule-c48dfb73-ede0-4ebf-b912-214379cd4ce7 - Check whether Databases for Redis is accessible only by using private endpoints
rule-ac09e136-8581-416a-a865-e9fc35a758be - Check whether Databases for Elasticsearch is enabled with encryption
rule-871594ca-0a70-492b-8a42-6f9474445f01 - Check whether Databases for Elasticsearch is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-47ca5017-27e9-4b8b-95d3-c2529271fbb1 - Check whether Databases for Elasticsearch is accessible only through HTTPS
rule-026e6d36-6a15-4623-846d-cab6f3b789d9 - Check whether Databases for Elasticsearch is accessible only by using private endpoints
rule-d634caeb-e5a6-467a-a4ac-8da8fd39f9ef - Check whether Databases for etcd is enabled with encryption
rule-42612696-2b8e-4fa7-8c17-78f191d2e1a0 - Check whether Databases for etcd is accessible only through HTTPS
rule-458decc2-a081-4c49-8f31-eeaf4833d8c8 - Check whether Databases for etcd is accessible only by using private endpoints
rule-4d7e56d6-f657-418c-9e49-6d248b2cf5a6 - Check whether Databases for PostgreSQL is enabled with encryption
rule-041ff30b-7167-4411-985d-5ad32ab6f850 - Check whether Databases for PostgreSQL is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-872db4fc-2f7c-4ba0-ace7-dc468f6813c7 - Check whether Databases for PostgreSQL is accessible only through HTTPS
rule-094495cf-c092-4dcb-96b8-3654c4bcf787 - Check whether Databases for PostgreSQL is accessible only by using private endpoints
rule-beb7b289-706b-4dc0-b01d-b1d15d4331e3 - Check whether Databases for MongoDB network access is restricted to a specific IP range
rule-04d856f1-68ce-4cba-b800-ba49f3c4f1a1 - Check whether Databases for Redis network access is restricted to specific IP range
rule-b5c06228-3f38-4d98-837f-2fe10d6ff9d5 - Check whether Databases for Elasticsearch network access is restricted to a specific IP range
rule-18540c4e-b96d-4ab9-a619-d541cc5a2824 - Check whether Databases for etcd network access is restricted to a specific IP range
rule-9b2d8054-bc93-44fd-901b-91f677287e84 - Check whether Databases for PostgreSQL network access is restricted to a specific IP range
rule-f6b7a692-8e48-4e74-b957-f5d591a7a15d - Check whether Key Protect has high availability
rule-d0725d07-27e6-4079-a3bc-746d5ccae00f - Check whether Hyper Protect Crypto Services instance is enabled with a dual authorization deletion policy
rule-da567ec9-8e24-4c65-993b-ad290bfdb855 - Check whether Cloud Object Storage buckets are enabled with IBM Activity Tracker
rule-0fb54bb2-773b-4cec-81b0-1ca7d8049ba0 - Check whether Cloud Object Storage buckets are enabled with IBM Cloud Monitoring
rule-5910ed25-7ad7-42d0-8e42-905df0123346 - Check whether IBM Activity Tracker is provisioned in multiple regions in an account
rule-d592e06a-8756-4efc-a401-1ec215168f48 - Check whether IBM Activity Tracker trails are integrated with LogDNA logs
rule-c98fab05-5119-451a-b100-35df840d2326 - Check whether IBM Activity Tracker logs are encrypted at rest
rule-1cdad315-c39e-4d7e-99ef-8af88ba410c1 - Check whether Cloud Internet Services (CIS) has web application firewall enabled
rule-564ed93b-1927-4562-8a90-fbae173cdee1 - Check whether Cloud Internet Services (CIS) has DDoS protection enabled
rule-7c5f6385-67e4-4edf-bec8-c722558b2dec - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to SSH port
rule-9653d2c7-6290-4128-a5a3-65487ba40370 - Check whether Virtual Private Cloud (VPC) security groups have no inbound rules that specify source IP 0.0.0.0/0 to RDP port
rule-96527f89-1867-4581-b923-1400e04661e0 - Check whether Virtual Private Cloud (VPC) has no rules in the default security group
rule-4f477e09-c9aa-4bfb-a6b1-eaeaca15c06a - Check whether Virtual Private Cloud (VPC) security groups have no inbound ports open to the internet (0.0.0.0/0)
rule-9407e5a8-ec51-4228-a01a-0f32364224a6 - Check whether Virtual Private Cloud (VPC) security groups have no outbound ports open to the internet (0.0.0.0/0)
rule-65f42d91-d537-4532-a2c8-c5cd377500a7 - Check whether all virtual server instances have at least one Virtual Private Cloud (VPC) security group attached
rule-9e16b8a4-1255-474e-a8a3-afed67de2627 - Check whether all network interfaces of a virtual server instance have at least one Virtual Private Cloud (VPC) security group attached
rule-9ecf7e84-aa51-42ad-875e-58e9522a5e65 - Check whether VPN for VPC has Internet Key Exchange (IKE) policy encryption that is not set to "triple_des"
rule-b4c58eff-4d19-4d33-840e-56b2ac76585a - Check whether VPN for VPC has Internet Key Exchange (IKE) policy authentication that is set to minimum "sha256"
rule-a8a69cd6-a902-4144-b652-8be68600a029 - Check whether VPN for VPC has a Diffie-Hellman group set to at least group #
rule-f98453ba-ebb9-4d96-aa13-09ef808fb4ba - Check whether VPN for VPC has IPsec policy encryption that is not set to "triple_des"
rule-09298b01-e2c5-43f1-a1b4-0b413fe4f998 - Check whether VPN for VPC has IPsec policy authentication that is set to minimum "sha256"
rule-115eb377-e256-459d-9e17-a868e128bd0c - Check whether VPN for VPC has an IPsec policy that does not have Perfect Forward Secrecy (PFS) disabled
rule-d8d13c3e-5ca0-46c5-a055-2475852c4ec6 - Check whether VPN for VPC authentication is configured with a strong pre-shared key with at least # characters
rule-53895d42-9190-47d8-9a70-0c1ebea5f7c7 - Check whether VPN for VPC has a Dead Peer Detection policy that is set to "restart"
rule-200dc6e7-96f1-49a9-9999-7e4645dc7ea6 - Check whether Application Load Balancer for VPC has public access disabled
rule-0e5151b1-9caf-433c-b4e5-be3d505e458e - Check whether Application Load Balancer for VPC is configured with multiple members in the pool
rule-bfc9d304-a086-43c0-b3ba-d0f101f616df - Check whether Application Load Balancer for VPC listener is configured with default pool
rule-8c923215-afdc-41b1-886c-64ce78741f8c - Check whether Application Load Balancer for VPC has health check configured when created
rule-d491a44c-e7bc-46bc-af07-231da0bb6501 - Check whether Application Load Balancer for VPC has a health check protocol that is either HTTP or HTTPS
rule-cb1180b7-2f8c-40ba-b2dd-207bee6bc17f - Check whether Application Load Balancer for VPC pool uses the HTTPS protocol for HTTPS listeners
rule-65b61a0f-ffdb-41ba-873d-ad329e7fc0ee - Check whether Application Load Balancer for VPC is configured to convert HTTP client requests to HTTPS
rule-d544f217-3723-4376-b3aa-037c5f201e8d - Check whether Application Load Balancer for VPC uses HTTPS (SSL & TLS) instead of HTTP
rule-773385ab-4654-4088-883d-fe9d58bc4ecb - Check whether Block Storage for VPC is enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-8ffe83cb-0ba1-47d6-a1e0-53e9932a5691 - Check whether Block Storage for VPC is enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-f87929f7-0787-4749-a1ce-35c1f2320401 - Check whether data disks are encrypted with customer-managed keys
rule-390aa9af-c497-4ebc-9958-d572a5b7be3d - Check whether unattached disks are encrypted with customer-managed keys
rule-0f7e7e60-a05c-43a7-be74-70615f14a342 - Check whether Security Groups for VPC contains no outbound rules in security groups that specify source IP 8.8.8.8/32 to DNS port
rule-c4d50b06-9331-4f5c-a3f8-9fe8060efc9b - Check whether Security Groups for VPC doesn't allow PING for the default security group
rule-936158a6-40ff-48ca-91a1-f184aa9b0dff - Check whether Virtual Private Cloud (VPC) classic access is disabled
rule-64c0bea0-8760-4a6b-a56c-ee375a48961e - Check whether Virtual Private Cloud (VPC) has no public gateways attached
rule-64e628f7-4f3a-4c0e-85a4-40300bafe856 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to any port
rule-f9137be8-2490-4afb-8cd5-a201cb167eb2 - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to SSH port
rule-f1e80ee7-88d5-4bf2-b42f-c863bb24601c - Check whether Virtual Private Cloud (VPC) network access control lists don't allow ingress from 0.0.0.0/0 to RDP port
rule-faacfd1f-454f-4e60-95d7-8fe01158840d - Check whether Virtual Private Cloud (VPC) network access control lists don't allow egress from 0.0.0.0/0 to any port
rule-c0314fad-f377-465e-9f16-fa5aa3d5ebbe - Check whether Virtual Servers for VPC instance has the minimum # interfaces
rule-17b54156-373a-48f9-b340-a7e47acd87b6 - Check whether Virtual Servers for VPC instance doesn't have a floating IP
rule-1af31459-ec38-4a58-91b0-956a17a38954 - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-4aead0cd-fe26-44f1-b552-8ffdbb86422a - Check whether Virtual Servers for VPC boot volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-a99b5f58-98ef-4208-9a23-e4fa25115d79 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Bring Your Own Key (BYOK)
rule-df7323fd-0b20-493c-89fe-c0b287817c99 - Check whether Virtual Servers for VPC data volumes are enabled with customer-managed encryption and Keep Your Own Key (KYOK)
rule-6970e312-329d-44dc-b683-5ab14acd6a42 - Check whether Virtual Servers for VPC is provisioned from an encrypted image
rule-24e259fb-608e-486f-bb9d-99b78ae0383c - Check whether Virtual Servers for VPC instances are identifable by the workload they are running based on the Auto Scale for VPC instance group definition
rule-250a7311-0cfd-4b43-8987-e5629f8d99ae - Check whether Application Load Balancer for VPC has application port of the workload that is identifiable by the Auto Scale for VPC instance group definition
rule-c2dd768e-9a49-4d6d-8ac5-8fcfb233a7b0 - Check whether Virtual Private Cloud (VPC) has no subnet with public gateway attached
rule-24508beb-c00a-4c6b-bd04-d38dd8cb7d71 - Check whether App ID user data is encrypted
rule-65196a37-ddcc-422d-8096-09955c4b4e5d - Check whether Event Streams is accessible through public endpoints
rule-3b2768e5-d783-4b0c-a47f-81479af34689 - Check whether Event Streams is accessible only by using private endpoints
rule-c471b983-9dc5-4659-8fb1-4d20c9d516cc - Check whether App ID redirect URIs are using HTTPS only
rule-f4d30138-01c1-409d-a469-fa99a23f2fbd - Check whether App ID redirect URIs are not using localhost or 127.0.0.1
rule-6e0c618d-523d-4352-a1d1-12bb9905b914 - Check whether App ID redirect URIs are not using wildcards (*)
rule-1d2287c7-954e-4425-897b-351c30be723c - Check whether App ID Cloud Directory users aren't able to update their own accounts
rule-9786160b-ee91-45ab-b84b-9806541e0fc6 - Check whether App ID Cloud Directory users aren't able to self-sign up to applications
rule-d9247d0e-dce5-4854-849a-4a9033c8fe8d - Check whether App ID anonymous authentication is disabled
rule-9246d682-f7c5-4aac-8751-3947e4f27b0b - Check whether App ID password strength regex is configured
rule-168f8081-dbd6-4cbc-bf19-f9934b39d59c - Check whether App ID advanced password policies are enabled
rule-dd1600d2-2e69-4ada-bca5-9e70b76ccd21 - Check whether App ID avoid password reuse policy is enabled
rule-5b662adf-fcac-4081-a10d-1aa7109aba4e - Check whether App ID password expiration policy is enabled
rule-59cb7d09-feab-48fc-b18b-ee581ca1761e - Check whether App ID prevent username in password policy is enabled
rule-0b082506-2481-4212-a150-d198357fcc3a - Check whether App ID multifactor authentication (MFA) is enabled for Cloud Directory users
rule-91734f9f-b8ff-4bfd-afb3-db4f789ac38f - Check whether App ID access tokens are configured to expire within # minutes
rule-ded212fe-7def-44ce-9480-0487067b64c4 - Check whether Kubernetes Service clusters are accessible only by using private endpoints
rule-2325054a-c338-474a-9740-0b7034487e40 - Check whether OpenShift clusters are accessible only by using private endpoints
rule-de84afba-b83a-41d6-8c80-d0b6acafe039 - Check whether OpenShift version is up-to-date
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
パラメーターを使用して、それらのコマンドをインストールするスクリプトを参照できます。
名前 | タイプ | 説明 | 必須またはオプション |
---|---|---|---|
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-remediation が true に設定されている場合にのみ考慮され、継続的コンプライアンス・パイプラインでのみサポートされる。 |
オプション |
オプトイン・クラ自動修復力 | テキスト | メジャーバージョンが現在の脆弱性パッケージのバージョン(true または false )と異なっていても、 cra auto remediation コマンドでパッケージを強制的にアップデートします。 このパラメータは、 opt-in-cra-auto-remediation が true に設定されている場合にのみ考慮され、継続的コンプライアンス・パイプラインでのみサポートされる。 |
オプション |
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 は、全ての脆弱性の原因の計算に基づいて、最適な重大度を決定します。