Azure DevOpsのPipelineで、Azure Defender for Cloud DevOpsを利用する際に追加しろと言われているPipelineタスク「MicrosoftSecurityDevOps@1」を利用する機会があったので、備忘録的に使用方法や設定値をまとめておこうと思います。
(Githubで公開されているソースなどを追いながらまとめたので認識違い等含む可能性が大いにあります。)
機能
「MicrosoftSecurityDevOps@1」は以下のツールの内包しています。
名前 | 概要 | 対応言語 |
---|---|---|
AntiMalware | Microsoft Defender for Endpointによるビルド環境のマルウェアスキャン。(おそらくWindows環境only) | - |
Bandit | Pythonで書かれたコードのセキュリティチェックのためのツール | Python |
BinSkin | コンパイラやリンカーの設定や、セキュリティ関連のバイナリを検証するツール(これもどちらかというとビルド環境のチェック) | |
Checkov | 複数のクラウド環境のテンプレートに対応した静的解析ツール | Terraform, Terraform プラン, CloudFormation, AWS SAM, Kubernetes, Helm チャート, Kustomize, Dockerfile, サーバーレス, Bicep, OpenAPI, ARMテンプレート |
ESlint | javascriptやtypescript用の静的解析ツール | javascript, typescript |
IaCFileScanner | テンプレートとクラウド環境のリソースをマッピングするためのツール | Terraform, CloudFormation, ARM テンプレート, Bicep |
Template Analyzer | ARMテンプレートとbicepで定義されている内容が、セキュリティとベストプラクティスに沿っているか確認するツール | ARMテンプレート, bicep |
Terrascan | IaC用の静的解析ツール | 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」という成果物を常時監視する仕様らしいので、変更は非推奨。
参考文献
- Microsoft Security DevOps の Azure DevOps 拡張機能の構成
- Github - PyCQA/bandit
- Github - Microsoft/binskim
- Github - bridgecrewio/checkov
- Github - eslint/eslint
- Github - Azure/template-analyzer
- Github - accurics/terrascan
- Github - aquasecurity/trivy
- Github - microsoft/security-devops-action
- Microsoft Defender for DevOps でコードセキュリティ試してみた【Azure DevOps編】