Azure DevOpsのPipelineで、Azure Defender for Cloud DevOpsを利用する際に追加しろと言われているPipelineタスク「MicrosoftSecurityDevOps@1」を利用する機会があったので、備忘録的に使用方法や設定値をまとめておこうと思います。
(Githubで公開されているソースなどを追いながらまとめたので認識違い等含む可能性が大いにあります。)

機能

「MicrosoftSecurityDevOps@1」は以下のツールの内包しています。

名前概要対応言語
AntiMalwareMicrosoft Defender for Endpointによるビルド環境のマルウェアスキャン。(おそらくWindows環境only)-
BanditPythonで書かれたコードのセキュリティチェックのためのツールPython
BinSkinコンパイラやリンカーの設定や、セキュリティ関連のバイナリを検証するツール(これもどちらかというとビルド環境のチェック)
Checkov複数のクラウド環境のテンプレートに対応した静的解析ツールTerraform, Terraform プラン, CloudFormation, AWS SAM, Kubernetes, Helm チャート, Kustomize, Dockerfile, サーバーレス, Bicep, OpenAPI, ARMテンプレート
ESlintjavascriptやtypescript用の静的解析ツールjavascript, typescript
IaCFileScannerテンプレートとクラウド環境のリソースをマッピングするためのツールTerraform, CloudFormation, ARM テンプレート, Bicep
Template AnalyzerARMテンプレートとbicepで定義されている内容が、セキュリティとベストプラクティスに沿っているか確認するツールARMテンプレート, bicep
TerrascanIaC用の静的解析ツールTerraform (HCL2)、Kubernetes (JSON/YAML)、Helm v3、Kustomize、Dockerfiles、CloudFormation
Trivyコンテナイメージや、ファイルシステム、リポジトリなどの脆弱性をスキャンするツールDockerfileなど

つまり機能としては

  • javascript, typescript, pythonコードのセキュリティ静的解析
  • Windowsビルド環境の脆弱性検知
  • コンテナイメージのセキュリティ静的解析
  • IaC用のテンプレートファイルの静的解析
  • IaC用のテンプレートを実リソースとマッピング

の5つが主な機能となる。

使用方法

使用するリポジトリのPipelineに以下タスク呼び出しを追加する。

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    [以下設定値]

設定値

Config

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    config: ./setting.gdnconfig

Microsoft Security DevOps (MSDO) の設定ファイルパスを指定する。各ツールの細かい設定をしたい場合には設定ファイル(*.gdnconfig)を作成し実行するとよい。
設定ファイルの詳細設定については、Github - microsoft/security-devops-actionを参照。(これもそのうち整理したい)

Policy

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    policy: 'azuredevops'

おそらく解析時のセキュリティポリシーを指定する設定。既定値はazuredevops。たぶんTemplate Analyzerでのベストプラクティスとかが変化するのかなと思いますが、正直これは何が違うのかいまいちよくわかりませんでした。 (なんならazuredevopsもmicrosoftやろ)

設定値の候補

  • azuredevops
  • microsoft
  • none

categories

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    categories: 'IaC, containers'

解析の対象カテゴリーを指定する項目。既定値は全カテゴリ(All)。一応ファイルの拡張子などから動的に各ツールのスキャン対象かはチェックしてくれてはいるので、大量にファイルが存在する場合など向け。

設定値の候補

  • code
    • javascript, typescript, pythonコードのセキュリティ静的解析用のツールが実行される
  • artifacts
    • いまいちよくわからなかったが、Trivyが動くらしい
  • IaC
    • IaC用のテンプレートファイルの静的解析とマッピングが実行される
  • containers
    • コンテナイメージのセキュリティ静的解析が実行される

languages

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    languages : 'javascript, typescript'

解析対象の言語を設定できる。既定値は対象言語すべて。正直あまり設定するケースが思い当たりませんでした。

設定値の候補

  • javascript
  • typescript

tools

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    tools : 'bandit, binskim'

上で記載したツールのうち、どのツールを使用するか指定できる。

設定値の候補

  • bandit
  • binskim
  • checkov
  • eslint
  • templateanalyzer
  • terrascan
  • trivy

break

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    break : true

エラー以上の脆弱性を検知した場合にパイプラインを異常終了させるかどうかの設定値。既定値はfalse。Pull Request時のパイプラインで脆弱性がある場合に止めたい際などには明示的に有効にしておく必要がある。

設定値の候補

  • true
  • false

publish

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    publish : true

解析結果を成果物として出力するかどうかの設定値。既定値はTrue。DevOps上やDefender for Cloudの画面で結果が見たい場合は有効にしておく。

設定値の候補

  • true
  • false

artifactName

steps:
- task: MicrosoftSecurityDevOps@1
 inputs:
    publish : 'CodeAnalysisLogs*'

解析結果の出力時の名前。既定値はCodeAnalysisLogs*。Defender for Cloudは「CodeAnalysisLogs」という成果物を常時監視する仕様らしいので、変更は非推奨。

参考文献