Join the Preview!
Code Analysis is in Preview.
Code Analysis は サイトでは利用できません。
概要
Datadog Static Analysis をセットアップするには、Software Delivery > Code Analysis に移動します。
Static Analysis のスキャンの実行先を選択
Datadog ホスト型スキャンでの実行
Datadog ホスト型の Static Analysis スキャンはプレビュー段階です。アクセスのリクエストはカスタマー サクセス マネージャーに連絡してください。
Datadog のインフラストラクチャ上で直接 Datadog Static Analysis のスキャンを実行できます。開始するには、Code Analysis ページ に移動します。
CI パイプラインでスキャン
Datadog Static Analysis は datadog-ci
CLI を使用して CI パイプラインで実行されます。Datadog API キー と アプリケーション キー (code_analysis_read
スコープが必要) を設定し、各 CI プロバイダで Static Analysis を実行します。
ソース コード管理プロバイダの選択
Datadog Static Analysis はすべてのソース コード管理プロバイダをサポートし、GitHub にはネイティブ サポートがあります。
GitHub 連携を設定
ソース コード管理プロバイダが GitHub の場合、GitHub integration タイル から GitHub App を構成し、source code integration をセットアップして、インライン コード スニペットを表示し、pull request comments を有効にする必要があります。
GitHub App をインストールする際、特定の機能を有効にするために次の権限が必要です:
Content: Read
: Datadog に表示される コード スニペットを確認できるようにしますPull Request: Read & Write
: pull request comments を使用して違反に対するフィードバックをあなたの Pull Requests に直接追加できるようにし、さらに 脆弱性を修正 するための Pull Requests を作成できるようにします
その他のソース コード管理プロバイダ
別のソース コード管理プロバイダを使用している場合は、datadog-ci
CLI ツールを使用して CI パイプラインで Static Analysis を実行し、Datadog に結果をアップロード してください。
結果が Code Analysis ページに表示され始める前に、デフォルト ブランチでリポジトリの解析を 必ず 実行する必要があります。
構成をカスタマイズ
既定では、Datadog Static Analysis は使用しているプログラミング言語向けの Datadog の ルール セット でリポジトリをスキャンします。適用する ルール セットと適用範囲をカスタマイズするには、リポジトリの ルート ディレクトリ に static-analysis.datadog.yml
ファイルを追加します。
static-analysis.datadog.yml
ファイルには、次の グローバル オプションを含めることができます:
名前 | 説明 | 必須 | デフォルト |
---|
rulesets | ルール セット名と構成の一覧。 利用可能な ルール セットをすべて表示。 | true | |
ignore | 無視するパス プレフィックスおよび glob パターンの一覧。 一致したファイルは解析されません。 | false | |
only | 解析対象とするパス プレフィックスおよび glob パターンの一覧。 一致したファイルのみ解析されます。 | false | |
ignore-gitignore | 特定のファイルの解析をスキップするために .gitignore ファイルに記載されたパスを使用しないようにします。 | false | false |
max-file-size-kb | 指定サイズ (kB 単位) より大きいファイルを無視します。 | false | 200 |
static-analysis.datadog.yml
ファイルには、次の ruleset オプションを含めることができます:
名前 | 説明 | 必須 |
---|
rules | この ruleset に属するルールの構成の一覧。 | false |
ignore | この ルール セットに対して無視するパス プレフィックスおよび glob パターン。 該当するファイルは解析されません。 | false |
only | この ルール セットに対して解析するパス プレフィックスおよび glob パターン。 該当するファイルのみ解析されます。 | false |
static-analysis.datadog.yml
ファイルには、次の rule オプションを含めることができます:
名前 | 説明 | 必須 |
---|
ignore | このルールに対して無視するパス プレフィックスおよび glob パターン。 該当するファイルは解析されません。 | false |
only | このルールに対して解析するパス プレフィックスおよび glob パターン。 該当するファイルのみ解析されます。 | false |
arguments | カスタマイズ可能な引数をサポートするルール向けの値のマップ。 | false |
arguments
フィールドのマップは、引数の名前をキーとし、その値は文字列またはマップです:
- リポジトリ全体に対して値を設定するには、文字列として指定します。
- リポジトリ内のサブツリーごとに異なる値を設定するには、サブツリー プレフィックスから、そのサブツリー内でその引数が持つ値へのマップとして指定します。
static-analysis.datadog.yml
ファイルの完全な構造は次のとおりです:
rulesets:
- ruleset-name
- ruleset-name:
# 次のパス / ファイルにのみこの ルール セットを適用します
only:
- "path/example"
- "**/*.file"
# 次のパス / ファイルではこの ルール セットを適用しません
ignore:
- "path/example"
- "**/*.file"
- ruleset-name:
rules:
rule-name:
# 次のパス / ファイルにのみこのルールを適用します
only:
- "path/example"
- "**/*.file"
# 次のパス / ファイルではこのルールを適用しません
ignore:
- "path/example"
- "**/*.file"
arguments:
# ルールの引数を value に設定します
argument-name: value
rule-name:
arguments:
# 異なるサブ ツリーで異なる引数値を設定します
argument-name:
# 既定では value_1 を設定します (リポジトリの root パス)
/: value_1
# 特定のパスでは value_2 を設定します
path/example: value_2
# 次のパス / ファイル内にあるもののみを解析します (いずれの ルール セットでも)
only:
- "path/example"
- "**/*.file"
# 次のパス / ファイル内にあるものは解析しません (いずれの ルール セットでも)
ignore:
- "path/example"
- "**/*.file"
例の構成ファイル:
rulesets:
- python-best-practices
- python-security
- python-code-style:
rules:
max-function-lines:
# 次のファイルには ルール max-function-lines を適用しません
ignore:
- "src/main/util/process.py"
- "src/main/util/datetime.py"
arguments:
# ルール max-function-lines のしきい値を 150 行に設定します
max-lines: 150
max-class-lines:
arguments:
# ルール max-class-lines のしきい値をサブ ツリーごとに変えます
max-lines:
# 既定ではしきい値を 200 行に設定します (リポジトリの root パス)
/: 200
# src/main/backend ではしきい値を 100 行に設定します
src/main/backend: 100
- python-inclusive
- python-django:
# 次のパスにのみ python-django ルール セットを適用します
only:
- "src/main/backend"
- "src/main/django"
# 次のパターンに一致するファイルでは python-django ルール セットを適用しません
ignore:
- "src/main/backend/util/*.py"
# ソース ファイルのみを解析します
only:
- "src/main"
- "src/tests"
- "**/*.py"
# サード パーティ または生成されたファイルは解析しません
ignore:
- "lib/third_party"
- "**/*.generated.py"
- "**/*.pb.py"
違反の無視
リポジトリ単位で無視
static-analysis.datadog.yml
ファイルに ignore ルールを追加します。以下の例では、すべてのディレクトリに対して javascript-express/reduce-server-fingerprinting
ルールを無視します。
rulesets:
- javascript-express:
rules:
reduce-server-fingerprinting:
ignore: "**"
ファイルまたはディレクトリで無視
static-analysis.datadog.yml
ファイルに ignore ルールを追加します。以下の例では、このファイルに対して javascript-express/reduce-server-fingerprinting
ルールを無視します。パスでの無視方法の詳細は、構成のカスタマイズ セクション を参照してください。
rulesets:
- javascript-express:
rules:
reduce-server-fingerprinting:
ignore: "ad-server/src/app.js"
特定のインスタンスを無視
違反の特定のインスタンスを無視するには、無視したいコード行の上に no-dd-sa
というコメントを記述します。これにより、その行から違反が生成されることはなくなります。たとえば、次の Python コード スニペットでは、foo = 1
の行は Static Analysis スキャンで無視されます。
#no-dd-sa
foo = 1
bar = 2
すべてのルールを無視するのではなく、特定のルールだけを無視するために no-dd-sa
を使用することもできます。その場合は、次のテンプレートで <rule-name>
を無視したいルール名に置き換えて指定します:
no-dd-sa:<rule-name>
たとえば、次の JavaScript コード スニペットでは、my_foo = 1
の行は javascript-code-style/assignment-name
ルールを除くすべてのルールで解析されます。このルールは、開発者に キャメル ケース を スネーク ケース の代わりに使用するよう指示します。
// no-dd-sa:javascript-code-style/assignment-name
my_foo = 1
myBar = 2
サード パーティの Static Analysis 結果を Datadog にアップロード
SARIF インポートは Snyk、CodeQL、Semgrep、Checkov、Gitleaks、Sysdig でテスト済みです。他の SARIF 準拠ツールで問題が発生した場合は
Datadog サポート までお問い合わせください。
相互運用可能な静的分析結果交換形式 (SARIF) であることを条件に、サードパーティーの静的分析ツールから Datadog へ結果を送信することができます。Node.js バージョン 14 以降が必要です。
SARIF レポートをアップロードするには
DD_API_KEY
変数と DD_APP_KEY
変数が定義されていることを確認します。
Optionally, set a DD_SITE
variable (this default to datadoghq.com
).
datadog-ci
ユーティリティをインストールします。
npm install -g @datadog/datadog-ci
サードパーティの静的分析ツールをコード上で実行し、結果を SARIF 形式で出力します。
結果を Datadog にアップロードします。
datadog-ci sarif upload $OUTPUT_LOCATION
Diff-aware スキャン
Diff-aware スキャンでは、Datadog の static analyzer がフィーチャー ブランチのコミットで変更されたファイルのみをスキャンします。これにより、毎回のスキャンでリポジトリ内のすべてのファイルを解析しないため、スキャン時間が大幅に短縮されます。CI パイプラインで Diff-aware スキャンを有効にするには、次の手順に従ってください:
- CI パイプラインで
DD_APP_KEY
、DD_SITE
、DD_API_KEY
変数が設定されていることを確認します。 - static analyzer を起動する前に
datadog-ci git-metadata upload
の呼び出しを追加します。このコマンドは、Datadog バック エンドで Git メタ データを利用できるようにします。解析対象ファイル数を算出するには、Git メタ データが必要です。 - datadog-static-analyzer がフラグ
--diff-aware
付きで呼び出されることを確認します。
コマンド シーケンスの例 (これらのコマンドは Git リポジトリ内で実行する必要があります):
datadog-ci git-metadata upload
datadog-static-analyzer -i /path/to/directory -g -o sarif.json -f sarif –-diff-aware <...other-options...>
注: Diff-aware スキャンを完了できない場合は、ディレクトリ全体がスキャンされます。
その他の参考資料