- 要件
- サポートされている言語とフレームワーク
- スキャナに貢献する
- 設定
- ルールセットのカスタマイズ
- 特定のアナライザーバージョンへのピン留め
- 脆弱性の自動解決
- レポートのJSON形式
- トラブルシューティング
インフラストラクチャ・アズ・コード(IaC)スキャン
GitLab 14.5 で導入されました。
Infrastructure as Code (IaC) ScanningはIaCの設定ファイルに既知の脆弱性がないかスキャンします。
IaC ScanningはTerraform、Ansible、AWS CloudFormation、Kubernetesの設定ファイルをサポートしています。
要件
IaC Scanningは、デフォルトで利用可能なtest
ステージで実行されます。.gitlab-ci.yml
ファイルでステージを再定義すると、test
ステージが必要になります。
安定したパフォーマンスを確保するため、最低4GBのRAMを推奨します。
IaC Scanningジョブを実行するには、デフォルトではGitLab Runnerにdocker
またはkubernetes
のエクゼキュータが必要です。GitLab.comの共有Runnerを使っている場合は、デフォルトで有効になっています。
19.03.0
でないことを確認してください。詳細はトラブルシューティング情報をご覧ください。サポートされている言語とフレームワーク
GitLab IaCスキャニングは様々なIaC設定ファイルをサポートしています。GitLabのIaCセキュリティスキャナーは、言語が混在するプロジェクトでも機能する自動言語検出機能も備えています。プロジェクトのソースコードからサポートされている設定ファイルが検出された場合、適切なIaCアナライザーを自動的に実行します。
設定ファイルの種類 | スキャンツール | GitLabバージョンで導入されました。 |
---|---|---|
Ansible | KICS | 14.5 |
AWS CloudFormation | KICS | 14.5 |
Azure Resource Manager1 | KICS | 14.5 |
ドッカーファイル | KICS | 14.5 |
Google デプロイマネージャ | KICS | 14.5 |
Kubernetes | KICS | 14.5 |
OpenAPI | KICS | 14.5 |
Terraform2 | KICS | 14.5 |
- IaC ScanningはJSON形式のAzureリソースマネージャーテンプレートを分析できます。テンプレートをBicep言語で記述する場合、GitLab IaC Scanningがテンプレートを分析する前に、bicep CLIを使ってBicepファイルをJSONに変換する必要があります。
- カスタムレジストリ内のTerraformモジュールは脆弱性スキャンされません。提案されている機能についてはこのイシューに従ってください。
サポートされるディストリビューション
GitLabスキャナーは、サイズとメンテナーのため、ベースとなるalpineイメージが提供されます。
FIPS対応イメージ
GitLab 14.10で導入されました。
GitLab はFIPS 対応の Red Hat UBIバージョンのイメージも提供しています。そのため、標準イメージをFIPS対応イメージに置き換えることができます。イメージを設定するには、SAST_IMAGE_SUFFIX
を設定-fips
するか、標準タグに -fips
拡張子を-fips
加えて変更 -fips
します。
variables:
SAST_IMAGE_SUFFIX: '-fips'
include:
- template: Jobs/SAST-IaC.gitlab-ci.yml
すべての GitLab ティアで IaC アナライザーを利用可能にする方法
全てのオープンソース(OSS) アナライザーは GitLab Free ティアで利用可能です。将来のプロプライエタリなアナライザはより高い階層に制限されるかもしれません。
階層ごとの機能概要
以下の表に示すように、GitLabの階層によって利用できる機能が異なります:
機能 | 無料およびプレミアム | アルティメット |
---|---|---|
IaCスキャナの設定 | {チェックサークル} | {チェックサークル} |
JSONレポートのダウンロード | {チェックサークル} | {チェックサークル} |
マージリクエストウィジェットで新しい発見を見る | {点線円} | {チェックサークル} |
脆弱性の管理 | {点線円} | {チェックサークル} |
セキュリティダッシュボードへのアクセス | {点線円} | {チェックサークル} |
スキャナに貢献する
他のセキュリティスキャナをGitLabにインテグレーションする方法については、セキュリティスキャナのインテグレーションドキュメントをご覧ください。
設定
プロジェクトにIaCスキャンを設定するには、次のようにします:
IaCスキャンの手動設定
IaC Scanningを有効にするには、GitLabインストールの一部として提供されたSAST-IaC.gitlab-ci.yml
テンプレート をインクルードする必要があります。以下にインクルードする方法の例を示します:
include:
- template: Jobs/SAST-IaC.gitlab-ci.yml
このテンプレートは、CI/CDパイプラインにIaCスキャンのジョブを作成し、プロジェクトの設定ファイルに脆弱性がないかスキャンします。
結果はSASTレポートアーティファクトとして保存され、ダウンロードして分析することができます。
自動マージリクエストによる IaC スキャニングの有効化
プロジェクトで IaC スキャンを有効にするには、マージリクエストを作成します:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- セキュア > セキュリティ設定を選択します。
- Infrastructure as Code (IaC) Scanning] の行で、[Configure with a merge request] を選択します。
- マージリクエストをレビューしてマージし、IaCスキャンを有効にします。
パイプラインに IaC スキャンジョブが含まれるようになりました。
ルールセットのカスタマイズ
GitLab 14.8で導入されたオーバーライドルールをサポートしました。
GitLabで提供されるデフォルトのIaCスキャンルールをカスタマイズすることができます。
以下のカスタマイズオプションは別々に、または一緒に使用することができます:
- 定義済みのルールを無効にします。
- 定義済みのルールを無効にします。
定義済みのアナライザ・ルールの無効化
アクティブにしたくない特定のIaCスキャンルールがある場合、それを無効にすることができます。
アナライザ ルールを無効にするには
- プロジェクトのルートに
.gitlab
ディレクトリを作成します(まだ存在しない場合)。 -
.gitlab
ディレクトリがまだ存在しない場合は、sast-ruleset.toml
という名前のカスタム・ルールセット・ファイルを作成します。 -
ruleset
セクションのコンテキストで、disabled
フラグをtrue
に設定してください。 - 1つ以上の
ruleset
サブセクションで、無効にするルールを列挙してください。すべてのruleset.identifier
セクションは持っています:- ルールの
type
フィールド。IaC スキャニングの場合、識別子タイプはkics_id
です。 - ルール識別子の
value
フィールド。KICS ルール識別子は英数字文字列です。ルール識別子を検索するには、次の手順に従います:- JSON レポートのアーティファクトで見つけます。
- KICS クエリのリストでルール名を検索し、表示された英数字の識別子をコピーします。ルール違反が検出されると、脆弱性ページにルール名が表示されます。
- ルールの
sast-ruleset.toml
ファイルをデフォルトのブランチにマージすると、無効化されたルールに対する既存の調査結果が自動的に解決されます。
次の例のsast-ruleset.toml
ファイルでは、識別子のtype
およびvalue
に一致することで、無効なルールがkics
アナライザに割り当てられています:
[kics]
[[kics.ruleset]]
disable = true
[kics.ruleset.identifier]
type = "kics_id"
value = "8212e2d7-e683-49bc-bf78-d6799075c5a7"
[[kics.ruleset]]
disable = true
[kics.ruleset.identifier]
type = "kics_id"
value = "b03a748a-542d-44f4-bb86-9199ab4fd2d5"
定義済みのアナライザ・ルールの上書き
カスタマイズしたい特定のIaC Scanningルールがある場合、それをオーバーライドすることができます。例えば、ルールの重大度を下げたり、発見した問題の修正方法について独自のドキュメントにリンクしたりすることができます。
ルールを上書きするには
- プロジェクトのルートに
.gitlab
ディレクトリを作成します(まだ存在しない場合)。 -
.gitlab
ディレクトリがまだ存在しない場合は、sast-ruleset.toml
という名前のカスタム・ルールセット・ファイルを作成します。 - 1つ以上の
ruleset.identifier
サブセクションに、オーバーライドするルールを列挙してruleset.identifier
ください。ruleset.identifier
すべてのruleset.identifier
セクションには- ルールの
type
フィールド。IaC スキャニングの場合、識別子タイプはkics_id
です。 - ルール識別子の
value
フィールド。KICS ルール識別子は英数字文字列です。ルール識別子を検索するには、次の手順に従います:- JSON レポートのアーティファクトで見つけます。
- KICS クエリのリストでルール名を検索し、表示された英数字の識別子をコピーします。ルール違反が検出されると、脆弱性ページにルール名が表示されます。
- ルールの
-
ruleset
セクションのruleset.override
コンテキストに、オーバーライドするキーを指定します。任意のキーの組み合わせをオーバーライドできます。有効なキーは以下のとおりです:- 説明
- メッセージ
- 名前
- 重大度 (有効なオプション: 重大、高、中、低、不明、情報)
次の例sast-ruleset.toml
ファイルでは、ルールは識別子のtype
とvalue
によってマッチされ、その後オーバーライドされます:
[kics]
[[kics.ruleset]]
[kics.ruleset.identifier]
type = "kics_id"
value = "8212e2d7-e683-49bc-bf78-d6799075c5a7"
[kics.ruleset.override]
description = "OVERRIDDEN description"
message = "OVERRIDDEN message"
name = "OVERRIDDEN name"
severity = "Info"
特定のアナライザーバージョンへのピン留め
GitLab が管理する CI/CD テンプレートはメジャーバージョンを指定し、そのメジャーバージョン内の最新のアナライザーリリースを自動的にプルします。
場合によっては、特定のバージョンを使う必要があるかもしれません。例えば、後のリリースのリグレッションを避ける必要があるかもしれません。
自動更新の動作をオーバーライドするには、SAST-IaC.gitlab-ci.yml
テンプレート をインクルードした後、CI/CD 設定ファイルにSAST_ANALYZER_IMAGE_TAG
CI/CD 変数を設定してください。
この変数は特定のジョブでのみ設定してください。この変数をトップレベルで設定すると、設定したバージョンが他の SAST アナライザで使用されます。
タグを設定できます:
-
3
のようなメジャーバージョンです。パイプラインは、このメジャーバージョン内でリリースされたマイナーバージョンやパッチアップデートを使用します。 -
3.7
のようなマイナーバージョン。パイプラインは、マイナーバージョン内でリリースされたパッチアップデートを使用します。 -
3.7.0
のようなパッチバージョン。パイプラインはアップデートを受け取りません。
この例では、KICS
アナライザーの特定のマイナーバージョンを使用しています:
include:
- template: Security/SAST-IaC.gitlab-ci.yml
kics-iac-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.1"
脆弱性の自動解決
- GitLab 15.9で
sec_mark_dropped_findings_as_resolved
というプロジェクトレベルのフラグで導入されました。- 15.10ではデフォルトで有効になっています。GitLab.comでは、プロジェクトのフラグを無効にする必要がある場合はサポートに連絡してください。
- GitLab 16.2で機能フラグが削除されました。
GitLab IaC Scanningは、まだ関連性のある脆弱性に集中できるように、以下の場合に脆弱性を自動的に解決します:
- 定義済みのルールを無効にした場合
- デフォルトのルールセットからルールを削除します。
脆弱性管理システムは、自動的に解決された脆弱性にコメントを残すため、脆弱性の履歴を残すことができます。
後でルールを再度有効にすると、トリアージのために発見が再開されます。
レポートのJSON形式
IaCツールは、既存のSASTレポート・フォーマットでJSONレポート・ファイルを生成します。詳細については、このレポートのスキーマを参照してください。
JSON レポートファイルは CI パイプラインページ、または artifacts: paths
をgl-sast-report.json
に設定することでマージリクエストのパイプラインタブからダウンロードできます。詳細については、アーティファクトのダウンロードを参照してください。
トラブルシューティング
デバッグレベルのロギング
デバッグ・レベルのロギングは、トラブルシューティングの際に役立ちます。詳細については、デバッグレベルロギングを参照してください。
IaCスキャンの所見は、予期せずNo longer detected
。
以前に検出された検出結果が予期せずNo longer detected
と表示される場合、スキャナの更新が原因である可能性があります。更新により、効果がない、または誤検出と判断されたルールが無効になり、検出結果がNo longer detected
と表示されることがあります:
- GitLab 15.3では、KICS SAST IaCスキャナーのシークレット検出が無効になったため、「パスワードとシークレット」ファミリーのIaC検出結果が
No longer detected
。
exec /bin/sh: exec format error
ジョブログのメッセージ
GitLab IaC Scanningアナライザーは、amd64
CPUアーキテクチャ上での実行のみをサポートしています。このメッセージは、ジョブがarm
のような異なるアーキテクチャで実行されていることを示しています。