申し込んだGitHub Advanced Security for Azure DevOps(以下GHAS)プレビューがようやく有効化されたので、さっそく試してみました…といっても、GitHubにあるものと全く同じなので、新鮮味というものはありませんが😅。
ライセンス
90日以内にレポジトリに一度でもコミットしたユーザーをアクティブユーザーとして定義しており、アクティブユーザーあたり月額$49だそうです。レポジトリ数は一つ以上すべてですので、一つでも有効にしたチームプロジェクトであれば基本的に配下のレポジトリはすべて有効にしたほうがいいんじゃないかなと思います。課金は紐づけられたAzureサブスクリプションなので、必ず関連付けてください。
今のところチームプロジェクト単位で強制的に有効化するポリシーは今のところなさそうなので、フィードバックしておこうと思います。
初期設定
GHASが有効化されるとレポジトリの設定に上記のUIが表示されます。
Azure DevOpsにサブスクリプションを紐づけていたらBegin billingをクリックすると課金開始です。
既定ではシークレットキーのプッシュの保護も有効化されます。
アクティブユーザーはhttps://dev.azure.com/{organization}/_settings/billing
ページにadvanced security
があるので、そこから確認できます。
この有効化する処理はセキュリティ設定するレポジトリに対してそれぞれでやってください。GitHubと同じですが、あちらはorganization配下のレポジトリでは自動で設定するポリシー設定できるはずです。
シークレットキーをプッシュさせない
たとえばこんな感じでAzure Blob Storageへアクセスするプログラムに接続文字列をべたっと書いたコードがあったとします。
GHASを有効化したレポジトリにプッシュするとき、こんな風にはじかれます。GHASを有効化するときBlock secrets on push
がデフォルトで有効になっています。これはサーバー側ではなく、クライアントでやっているのでサーバーに登録されるわけではありません。
じゃあWeb画面で編集したら?ということでやってみても、同様にブロックされます。シークレットキーを埋め込まなくなるので安心ですね。
コード脆弱性を発見する
trigger: - master pool: vmImage: ubuntu-latest steps: - task: AdvancedSecurity-Codeql-Init@1 inputs: languages: 'csharp,javascript' - task: AdvancedSecurity-Codeql-Autobuild@1 - task: AdvancedSecurity-Codeql-Analyze@1 inputs: querysuite: 'default' - task: AdvancedSecurity-Dependency-Scanning@1 - task: AdvancedSecurity-Publish@1
※ サンプルではmainブランチへのプッシュで実行するトリガーを設定していますが、実際はpull request trigger使うか、スケジュール実行のほうがいいでしょう。
CodeQLの設定、スキャンする言語の設定(JavaScriptとC#)、プロジェクトのビルド、静的解析、依存関係の検査(脆弱性のあるパッケージあるかなど)、実行結果の発行…で、実際カスタマイズするところはCodeQLの解析部分と対象言語くらいでしょう。
現在サポートされている言語はこれだけあります。
組織内の都合でVB.NET使っている場合はVisual Studio内蔵のものを使えばいいですが、GHAS使える場合はCodeQL使えばいいんじゃないかと思います。GitHubのGHASのライセンスを持っている人であればクライアントでも使えるそうです。
今後
今のところdependabotがないですが、これも提供されるとうれしいですね。