GitHub Advanced Security for Azure DevOps設定の要点|Azure Repos管理者が確認すべき変更点

Azure ReposでGitHub Advanced Security for Azure DevOpsを設定する際の結論は、Secret ProtectionとCode Securityを必要な範囲に分けて有効化し、課金・権限・パイプライン影響を確認してから段階展開することです。特に管理者は、「すべて有効にする」が既存リポジトリだけに作用する点、新規リポジトリへの自動適用は別設定である点、CodeQLや依存関係スキャンはパイプライン設計に影響する点を見落とさないようにする必要があります。

2026年5月27日に更新されたMicrosoft Learnの公式情報では、GitHub Advanced Security for Azure DevOpsの構成対象、Secret ProtectionとCode Securityの機能差、Azure Reposでの有効化単位、プルリクエスト注釈や状態チェックまで整理されています。この記事では、Microsoft Azure環境でAzure DevOpsを管理する担当者向けに、変更点・影響範囲・設定確認・移行時の注意点を実務目線でまとめます。(Microsoft Learn)

目次

今回の要点:Azure Reposの保護機能を「秘密情報」と「コード品質・依存関係」に分けて考える

GitHub Advanced Security for Azure DevOpsは、Azure Reposに対してGitHub Advanced Securityのセキュリティ機能を追加する仕組みです。主な機能は、シークレットスキャンのプッシュ保護、リポジトリ内のシークレットスキャン、依存関係スキャン、CodeQLによるコードスキャンです。公式情報では、これらが大きくGitHub Secret Protection for Azure DevOpsGitHub Code Security for Azure DevOpsに整理されています。(Microsoft Learn)

区分主な機能実務上の意味優先して有効化したいリポジトリ
Secret Protectionプッシュ保護、シークレットスキャンアラート、Security overviewAPIキー、接続文字列、資格情報などの漏えいを防ぐすべてのアクティブなリポジトリ、IaC、デプロイスクリプト、運用手順を含むリポジトリ
Code Security依存関係アラート、CodeQLスキャン、サードパーティツールの検出結果、Security overviewOSS脆弱性やコードレベルの脆弱性を早期に検出する外部公開サービス、顧客データを扱うアプリ、CI/CDが整備された主要リポジトリ

重要なのは、「セキュリティ機能を一括で入れるかどうか」ではなく、リポジトリごとにどのリスクを先に下げるかを決めることです。迷う場合は、まずSecret Protectionを広く検討し、Code Securityはビルド時間・パイプライン構成・修正体制を確認しながら主要リポジトリから展開すると失敗しにくくなります。

影響範囲:対象はAzure DevOps ServicesのAzure Repos Gitリポジトリ

GitHub Advanced Security for Azure DevOpsは、Azure DevOps Servicesで利用でき、対象はコード用のGitリポジトリです。GitHubリポジトリでGitHub Advanced Securityを使う場合は別のGitHub側の機能として扱う必要があります。(Microsoft Learn)

そのため、影響範囲の確認では次の切り分けが必要です。

確認対象確認ポイント対応の考え方
Azure DevOps組織Azure Reposを利用しているかGitHub側リポジトリと混同しない
リポジトリ種別コード用のGitリポジトリかGit以外の資産は別の管理方法を検討する
プロジェクト一括有効化の対象にするか課金見積もりとリポジトリ所有者を確認する
新規リポジトリ今後作成されるリポジトリにも自動適用するか「すべて有効」とは別に自動有効化を設定する
パイプラインAzure Pipelinesでスキャンを実行できるかCode Securityではビルド時間やエージェント要件を確認する

開発者への影響も小さくありません。Secret Protectionのプッシュ保護が有効になると、シークレットを含む今後のプッシュはブロックされます。また、依存関係スキャンやコードスキャンをプルリクエストに組み込むと、レビュー時に脆弱性の指摘や状態チェックが表示されるようになります。(Microsoft Learn)

有効化レベルの選び方:組織・プロジェクト・リポジトリのどこで管理するか

Advanced Security、Secret Protection、Code Securityは、組織、プロジェクト、リポジトリの各レベルで有効化できます。管理画面の「すべて有効にする」は既存リポジトリに対する操作であり、新しく作成されるリポジトリやプロジェクトへ自動適用したい場合は、別途自動有効化の設定を選ぶ必要があります。(Microsoft Learn)

有効化レベル向いているケース注意点
リポジトリ単位まず検証したい、重要リポジトリだけ先行したいリポジトリ数が多いと運用が手作業になりやすい
プロジェクト単位チームやサービス単位でまとめて管理したい既存リポジトリと新規リポジトリの扱いを分けて確認する
組織単位全社標準として展開したい課金、権限、アラート運用の設計を先に固める必要がある

実務では、最初から組織全体にCode Securityを展開するより、次の順序が現実的です。

フェーズ対象目的
検証代表的な1〜3リポジトリアラート量、ビルド時間、開発者への影響を確認する
先行展開外部公開アプリ、重要API、顧客データを扱うリポジトリ重大リスクを優先して下げる
標準化プロジェクトまたは組織全体新規リポジトリへの自動適用と運用ルールを整える

管理者が最初に確認すべき権限設定

Advanced Security関連の権限は、単なる閲覧権限ではありません。特に「設定の管理」は、機能の有効化や無効化に関わり、課金が発生する可能性がある操作です。公式情報では、アラート閲覧、アラート管理・無視、設定管理の3種類の権限が整理されています。(Microsoft Learn)

権限できること付与すべき相手
Advanced Security: アラートの読み取り脆弱性やスキャン結果を確認する開発者、セキュリティ担当、レビュアー
Advanced Security: アラートを管理および無視する誤検知の無視、アラートライフサイクル管理セキュリティエンジニア、リード開発者
Advanced Security: 設定を管理する機能の有効化・無効化Azure DevOps管理者、セキュリティ管理者など少数

よくある失敗は、プロジェクト管理者に広く権限を与えた結果、検証前のリポジトリまで有効化され、想定外の課金や大量アラートが発生するケースです。設定管理権限は最小限にし、リポジトリ所有者には原則としてアラート閲覧またはアラート管理までを付与する設計が安全です。

API連携でAdvanced Securityの情報を取得する場合は、個人用アクセストークンよりもMicrosoft Entra IDトークンの利用が推奨されています。条件付きアクセスや多要素認証、監査との整合性を考えると、運用スクリプトやダッシュボード連携もEntra IDベースに寄せるのが望ましい設計です。(Microsoft Learn)

課金で確認すべきポイント:アクティブコミッター数を見積もる

Advanced Securityの機能を利用するにはライセンスが必要です。課金の考え方では、対象リポジトリに対する過去90日以内のプッシュに含まれるコミッターがアクティブコミッターとして扱われます。Secret ProtectionとCode Securityは、Azure DevOps組織に関連付けられたAzureサブスクリプションへ課金され、製品ごとのアクティブコミッター数が重要になります。(Microsoft Learn)

確認項目見るべき場所・考え方
有効化前の見積もり組織、プロジェクト、リポジトリで有効化する前に表示されるアクティブコミッター数を確認
実際の使用数Organization settings > Billingで前日測定の使用済みライセンス数を確認
重複カウント同一Azureサブスクリプション、同一製品に紐づく場合はアクティブコミッターが重複除去される
予算管理Secret ProtectionとCode Securityを別々に有効化する場合、製品ごとの対象リポジトリを棚卸しする

既存顧客がスタンドアロンのSecret ProtectionとCode Securityへ移行する場合、既存のAdvanced Security体験は中断されないとされています。ただし、移行はAzure PortalからAzure DevOpsサポートにチケットを出す形で行い、Azureサブスクリプション単位で実施されます。提供したサブスクリプションに紐づく組織が対象になり、この要求は元に戻せないため、事前に対象サブスクリプションと組織の対応表を作っておくべきです。(Microsoft Learn)

Secret Protectionの設定ポイント:まず「漏えいを止める」運用を作る

Secret Protectionを有効にすると、シークレットスキャンのプッシュ保護とリポジトリスキャンが自動的に有効になります。プッシュ保護は有効化後のプッシュを評価し、リポジトリレベルのシークレットスキャンは履歴コミットを含む既存シークレットを検出してアラートを生成します。(Microsoft Learn)

管理者が準備すべきなのは、設定そのものよりも検出後の運用です。

場面開発者が取るべき対応管理者が整備すべきルール
プッシュがブロックされたコミットからシークレットを除去し、コード外の安全な保管先に移すどこに保管するか、誰に相談するかを明文化する
履歴コミットから検出された影響範囲を確認し、必要に応じて資格情報をローテーションするインシデント扱いにする基準を決める
誤検知の疑いがあるすぐに無視せず、リード開発者またはセキュリティ担当に確認するアラートを無視できる権限者を限定する

よくある失敗は、プッシュ保護を有効にしただけで安心してしまうことです。プッシュ保護は今後の混入を止める仕組みであり、過去のコミットに含まれる秘密情報の影響を消すものではありません。履歴スキャンの初回アラートは、単なるノイズとして扱わず、認証情報の有効性、外部公開リポジトリかどうか、利用先システムの重要度で優先順位を付けて対応します。

Dependency Scanningの設定ポイント:パッケージ復元後に実行する

依存関係スキャンを使うには、対象リポジトリでCode Securityを有効にする必要があります。依存関係スキャンはパイプラインベースのスキャンで、既定ブランチを対象にする場合はリポジトリ設定から「脆弱性のある依存関係をスキャンする」を利用できます。より高度な設定や全ブランチを対象にする場合は、スキャンしたいパイプラインに依存関係スキャンタスクを追加します。(Microsoft Learn)

実務で重要なのは、タスクの置き場所です。公式のトラブルシューティングでは、最も正確な結果を得るには、ビルドステップまたはパッケージ復元ステップの後に依存関係スキャンタスクを追加することが示されています。復元前に実行すると、コンポーネントをうまく識別できず、既知の脆弱性がある依存関係でもアラートが出ない可能性があります。(Microsoft Learn)

失敗例原因対応
依存関係が検出されないnpm installdotnet restoreなどの復元前にスキャンしているパッケージ復元後にAdvancedSecurity-Dependency-Scanning@1を配置する
大規模リポジトリでタイムアウトする既定の実行時間内に終わらないDependencyScanning.Timeoutで秒数を増やす
モノレポで不要な範囲までスキャンされる既定ではAgent.BuildDirectoryが処理対象DependencyScanning.SourcePathで対象ディレクトリを指定する
結果が別リポジトリに出るパイプライン定義とスキャン対象コードが別リポジトリadvancedsecurity.publish.repository.infer: trueを設定する

特にモノレポや複数リポジトリを参照するパイプラインでは、スキャン結果がどのリポジトリに紐づくかを必ず検証してください。アラートが表示されない場合、脆弱性がないのではなく、結果の公開先やスキャン対象パスがずれているだけというケースがあります。(Microsoft Learn)

Code Scanningの設定ポイント:既定のセットアップと詳細設定を使い分ける

コードスキャンではCodeQLを使ってAzure DevOpsリポジトリ内のコードを分析し、セキュリティ脆弱性やコーディングエラーをアラートとして表示します。利用にはGitHub Advanced Security for Azure DevOps、またはスタンドアロン利用時のGitHub Code Securityが必要です。(Microsoft Learn)

コードスキャンには、既定のセットアップと詳細設定があります。

項目既定のセットアップ詳細設定
パイプライン変更不要CodeQLタスクを手動追加
言語検出CodeQL対応言語を自動検出タスクで言語を指定
ブランチ範囲既定ブランチ中心パイプラインをトリガーするブランチ
ビルド制御カスタムビルドステップなしコンパイル済み言語のビルド手順を制御
向いているケース早く有効化したい、標準的にスキャンしたい複数ブランチ、カスタムエージェント、既存CI/CD統合が必要

多くのリポジトリでは、まず既定のセットアップから開始し、必要に応じて詳細設定へ切り替えるのが安全です。既定のセットアップでは、組織設定からエージェントプールやスキャンスケジュールを構成できます。Microsoftホステッドエージェント、セルフホステッドエージェント、Managed DevOps Poolsの選択も検討対象になります。(Microsoft Learn)

詳細設定では、CodeQLタスクをAzure Pipelinesに直接追加します。コードスキャンは時間のかかるビルドタスクになる可能性があるため、メインの本番パイプラインにそのまま入れるより、複製した別パイプラインや新規パイプラインで実行する設計が推奨されています。(Microsoft Learn)

steps:
- task: AdvancedSecurity-Codeql-Init@1
  inputs:
    languages: "javascript"
    enableAutomaticCodeQLInstall: true

# ここにビルドやテストのステップを配置する

- task: AdvancedSecurity-Dependency-Scanning@1

- task: AdvancedSecurity-Codeql-Analyze@1

CodeQLの詳細設定では、AdvancedSecurity-Codeql-Init@1、カスタムビルドステップ、AdvancedSecurity-Codeql-Analyze@1の順序が基本です。対応言語には、C/C++、C#、Go、Java/Kotlin、JavaScript/TypeScript、Python、Ruby、Swiftが含まれます。JavaとKotlinはjava、JavaScriptとTypeScriptはjavascriptとして扱う点も押さえておきましょう。(Microsoft Learn)

セルフホステッドエージェント利用時の注意点

セルフホステッドエージェントを使っている組織では、ネットワークとランタイムの前提条件を先に確認します。依存関係スキャンが脆弱性アドバイザリデータを取得できるよう、dev.azure.comadvsec.dev.azure.comgovernance.dev.azure.comなどのURLを許可リストに追加する必要があります。また、2026年4月時点では互換性のある.NETランタイムとして.NET 8.xが示されており、CodeQLバンドルのインストールまたは自動インストール設定も確認が必要です。(Microsoft Learn)

セルフホステッドエージェントで失敗しやすいのは、Azure DevOpsの設定画面では有効化できているのに、パイプライン実行時に外部接続やCodeQL取得で止まるケースです。展開前に、代表リポジトリで以下を確認してください。

確認項目見落とすと起きること
許可リスト脆弱性データ取得や結果送信に失敗する
.NETランタイム依存関係スキャンタスクの実行に時間がかかる、または失敗する
CodeQLバンドルCodeQL初期化に失敗する
エージェントプールの余力スキャン待ちでCI/CD全体が遅延する
ビルドツールコンパイル済み言語で正しい解析結果が出ない

プルリクエスト注釈と状態チェックは「開発フロー変更」として扱う

依存関係スキャンとコードスキャンのプルリクエスト注釈は、スキャンタスクを含むパイプラインにビルド検証ポリシーが適用されている場合に自動構成されます。また、PRブランチをスキャンする前に、既定ブランチとターゲットブランチのAdvanced Securityスキャンが必要です。(Microsoft Learn)

さらに、Advanced Securityの状態チェックを使うと、セキュリティ脆弱性が検出されたプルリクエストのマージをブロックできます。利用できる状態チェックには、すべての重大・高重大度アラートの解決を求めるAdvancedSecurity/AllHighAndCriticalと、新規の重大・高重大度脆弱性をブロックするAdvancedSecurity/NewHighAndCriticalがあります。(Microsoft Learn)

実務では、いきなりAllHighAndCriticalを必須にすると、既存アラートが多いリポジトリでは開発が止まる可能性があります。初期導入では、まずアラートを可視化し、修正期限と例外承認ルールを作ったうえで、次にNewHighAndCriticalで新規混入を防ぐ流れが現実的です。

移行・展開前のチェックリスト

展開前には、機能の有効化だけでなく、運用面の準備を確認します。

チェック項目管理者が確認すること開発者に共有すること
対象リポジトリ重要度、所有者、アクティブコミッター数いつから有効化されるか
製品選択Secret Protectionのみか、Code Securityも有効にするかどのアラートが出る可能性があるか
権限設定管理権限を誰に付与するかアラート確認・対応の担当範囲
パイプライン依存関係復元、ビルド、CodeQL順序、エージェントビルド時間が変わる可能性
PRポリシー注釈だけにするか、状態チェックでブロックするかマージ条件が変わる可能性
課金Azureサブスクリプション、製品別アクティブコミッター数対象範囲拡大時の承認フロー
例外運用誤検知、緊急リリース、未修正アラートの扱い例外申請の方法

特に移行では、既存のバンドル型Advanced SecurityからSecret ProtectionとCode Securityのスタンドアロン製品へ移る場合、対象Azureサブスクリプションに紐づく全組織へ影響する点を確認してください。サポートチケットを出す前に、Azureサブスクリプション、Azure DevOps組織、対象プロジェクト、利用中リポジトリ、現在の課金状況を一覧化しておくと、移行後の想定違いを防げます。(Microsoft Learn)

展開手順:小さく始めて、標準設定として広げる

おすすめの展開手順は次の通りです。

手順実施内容完了条件
事前棚卸しAzure Reposのリポジトリ、所有者、主要言語、CI/CD有無を整理対象一覧と優先度が決まっている
権限設計設定管理、アラート管理、閲覧権限を役割別に整理課金操作ができる人を限定できている
パイロット代表リポジトリでSecret ProtectionとCode Securityを検証アラート量、ビルド時間、PR表示を確認済み
本番展開プロジェクト単位または組織単位で展開新規リポジトリ自動有効化の要否も設定済み
運用定着アラートのトリアージ、修正期限、例外承認を運用セキュリティアラートが放置されない

初回導入時は、アラートが大量に出ること自体を失敗と見なさないことが大切です。むしろ、これまで見えていなかったシークレット、古い依存関係、危険なコードパターンが可視化された状態です。重要なのは、すべてを即日修正しようとすることではなく、重大度、外部公開有無、悪用可能性、修正コストで優先順位を付けることです。

失敗しやすいポイントと回避策

失敗しやすいポイント何が起きるか回避策
「すべて有効」で新規リポジトリも対象になると思い込む新規リポジトリだけ保護されない自動有効化設定を別途確認する
設定管理権限を広く付与する意図しない有効化や課金が発生する設定管理は少人数に限定する
Code Securityを有効にしただけでスキャン完了と思うパイプライン未設定で結果が出ない既定セットアップまたは詳細設定を確認する
依存関係復元前にスキャンする依存関係を検出できない復元・ビルド後にスキャンタスクを置く
PR状態チェックを最初から厳しくする既存アラートでマージが止まる初期は可視化、次に新規高重大度のブロックへ移行する
セルフホステッドエージェントの通信要件を確認しないスキャンやCodeQL取得が失敗するURL許可リスト、.NET、CodeQLバンドルを事前確認する
スキャン結果の公開先を検証しない別リポジトリに結果が出るadvancedsecurity.publish.repository.inferを検討する

まとめ:次にやるべきこと

GitHub Advanced Security for Azure DevOpsの設定では、単に機能をオンにするだけでなく、どのリポジトリに、どの製品を、どの権限と課金管理で、どのパイプラインに組み込むかを決める必要があります。

まずはAzure Reposのリポジトリ一覧を作り、Secret Protectionを広く適用する候補と、Code Securityを優先すべき重要リポジトリを分けてください。次に、設定管理権限を絞り、アクティブコミッター数と課金見積もりを確認します。そのうえで、代表リポジトリに対してシークレットスキャン、依存関係スキャン、CodeQLスキャン、PR注釈、状態チェックを順番に検証すると、開発を止めずにAzure DevOpsのセキュリティ水準を引き上げられます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次