kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

GitHub Advanced Security for Azure DevOpsを試してみる

azure.microsoft.com

申し込んだGitHub Advanced Security for Azure DevOps(以下GHAS)プレビューがようやく有効化されたので、さっそく試してみました…といっても、GitHubにあるものと全く同じなので、新鮮味というものはありませんが😅。

docs.github.com

ライセンス

learn.microsoft.com

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の解析部分と対象言語くらいでしょう。

docs.github.com

現在サポートされている言語はこれだけあります。

組織内の都合でVB.NET使っている場合はVisual Studio内蔵のものを使えばいいですが、GHAS使える場合はCodeQL使えばいいんじゃないかと思います。GitHubのGHASのライセンスを持っている人であればクライアントでも使えるそうです。

codeql.github.com

今後

今のところdependabotがないですが、これも提供されるとうれしいですね。