コード セキュリティ アラート向け Copilot Autofix (プレビュー)

Copilot自動修正では、Azure DevOps 向け GitHub Advanced Security で、コード スキャン アラートと依存関係スキャンのセキュリティ脆弱性に対するエージェント型の修復が提供されます。 サポートされているアラートを開き、[修正を生成] を選択します。 Copilotコーディング エージェントは、関連するリポジトリ コンテキストを調査し、提案された変更を確認して調整し、修正候補を含む pull request を開くことができます。

通常の pull request ワークフローを使用して、変更を確認、テスト、マージします。 手順は、両方のアラートの種類で同じです。 開始するには、関連するアラートリストを選択し、関連するスキャナーを使用してマージ後の修正を確認します。

Note

この機能は限定パブリック プレビュー段階です。 Microsoftは現在、プレビューの追加ユーザーを受け入れていません。

機能は予告なく変更または削除される場合があります。 プレビュー機能には、サービス レベル アグリーメント (SLA) および制限付きサポートはありません。

GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用する方法については、「GitHub Advanced Security」を参照してください。

Prerequisites

Category Requirements
アクセス許可 - リポジトリのすべてのアラートの概要を表示するには、リポジトリに対する「コントリビューター」権限が必要です。
- Advanced Security でアラートを解除するには、プロジェクト管理者の権限が必要です。
- Advanced Security でアクセス許可を管理するには、プロジェクト コレクション管理者グループのメンバーであること、またはAdvanced Security: 設定の管理のアクセス許可が許可に設定されている必要があります。

高度なセキュリティの権限の詳細については、「高度なセキュリティ権限の管理」を参照してください。

  • コード スキャンまたは依存関係スキャンが設定され、リポジトリに対してアラートを生成している。
  • 少なくとも 1 つの サポート対象のアラート。
  • 高度なセキュリティ: アラートの表示 リポジトリ権限(修正を生成 を選択するユーザー)
  • Azure Pipelines エージェント プールへのアクセス。 Copilot Autofix は、修正を生成して公開するために、Microsoft がホストするパイプライン ジョブをキューに追加します。 実行には、使用可能な並列ジョブが必要です。 すべての並列ジョブが使用されている場合、修正プログラムは容量が使用可能になるまでキューに残ります。

Copilot自動修正では、プロジェクトまたはコレクションのビルド サービス アカウントではなく、GitHub Copilot ({organization})という名前の専用 ID を使用してリポジトリ操作が実行されます。 サービスは、ID に次のアクセス許可を自動的に付与します。

Operation アクセス許可
プロジェクトにアクセスする プロジェクトレベル情報を表示します
リポジトリの複製 Read
修正ブランチを作成してプッシュする ブランチの投稿と作成
pull request を作成して更新する pull request に貢献する
アラートを読む 高度なセキュリティ: アラートを表示する
pull request ディスカッションを追加する プル リクエストの議論を閲覧して参加する
パイプラインの実行を更新する ビルド情報の更新
pull request にラベルを付ける Copilot自動修正ラベルを作成する

これらのアクセス許可をビルド サービス アカウントに付与する必要はありません。 組織で明示的な拒否アクセス許可を使用している場合は、 GitHub Copilot ({organization}) ID がブロックしていないことを確認します。

agentic Autofix のしくみ

Agentic Autofix では、報告されたコードの場所のみに依存するのではなく、アラートの結果とリポジトリ コンテキストを使用します。 Copilotコーディング エージェントは、チェックイン済みのカスタム命令と関連するスキルを使用して、コーディングの標準、アーキテクチャ、修復パターンを理解できます。 次を含む pull request を開く前に、提案された変更を確認して調整できます。

  • 基になる脆弱性に対処する 推奨されるコード変更 。
  • アラート ID、重大度、変更の概要など、修正中のアラートの 説明 。

推奨される修正ではコード ベースのより広いコンテキストが考慮されるため、変更はアラートが発生した 1 行を超え、必要に応じて他のファイルへの変更を含めることができます。

Note

Copilot自動修正によって処理されるデータは、大規模言語モデル (LLM) のトレーニングには使用されません。

Important

Copilot自動修正候補は AI モデルによって生成され、正しい、完全、または安全であるとは限りません。 プル要求は常に注意深く確認し、新しい問題を発生させずにアラートが解決されることを検証し、変更をマージする前にテストします。

サポートされているアラート

アラートの種類 限定パブリック プレビューでのサポート
コード スキャン CodeQL とサード パーティのコード スキャン ツールからのアラート。
依存関係スキャン セキュリティ脆弱性アラート マルウェアの結果は含まれません。
シークレット スキャン サポートされていません。

サポートされているいずれのアラートの種類でも、Copilot Autofix により、確認用の変更が提案されます。 すべての検出事項の修正が保証されるわけではありません。 詳細については、「 修正プログラムは使用できません」を参照してください。

リポジトリの手順と必要なスキルを提示する

修正を生成するときに考慮するコンテキストを agentic Autofix に指定します。 サポートされている .github または .agents の場所にあるリポジトリにカスタムの手順とスキルをチェックインします。 これらのファイルは、Copilotコーディング エージェントがチームのコーディング標準と確立された修復ワークフローに従うのに役立ちます。

カスタム命令にコーディング標準を追加する

.github/copilot-instructions.md などのリポジトリ全体のカスタム命令を使用して、変更がプロジェクトにどのように適合するかを説明してください。 名前付け規則、承認されたライブラリ、アーキテクチャの境界、および変更をビルドおよびテストする方法に関するガイダンスを含めます。

たとえば、チームで共有する入力検証ヘルパーが必要な場合は、指示の中でその要件について説明します。 エージェントがアラートから推論することを想定しないでください。

# Coding standards

- Use the existing input-validation helpers instead of adding new validation logic.
- Follow the naming conventions in the surrounding code.
- Keep dependency changes scoped to the vulnerability being fixed.
- Update the relevant tests when a fix changes behavior.
- Run the documented build and test commands before proposing a change.

Copilot がサポートするファイル名と場所を使用します。 custom-instructions.mdという名前のファイルは、その名前だけでは、リポジトリ全体に適用されるCopilot命令ファイルであることを示しません。 リポジトリ全体のファイル形式については、GitHub Copilotのリポジトリのカスタム手順の追加を参照してください。

反復可能な修復タスク用のスキルを追加する

リポジトリ スキルは、タスク固有の命令、スクリプト、およびサポート リソースを提供できます。 .github/skills/<skill-name>/や.agents/skills/<skill-name>/などのディレクトリにスキルを格納し、その手順をSKILL.mdに記述します。

たとえば、依存関係更新スキルでは、パッケージ更新手順と互換性チェックを記述できます。 コード修正スキルでは、承認されたセキュリティ ライブラリを使用する方法を記述できます。 Agentic Autofix は、修正の生成の一環として関連するスキルを参照できます。すべてのスキルがすべてのアラートに適用されるわけではありません。 スキルの形式については、「 エージェントスキルについて」を参照してください。

Important

リポジトリの命令とスキルは、生成された修正がすべての要件を満たすという保証ではなく、追加のコンテキストを提供します。 提案された変更を自分の基準に照らして確認し、検証チェックを実行し、マージする前に脆弱性が解決されたことを確認します。

Billing

Copilot自動修正は、GitHub Advanced Security for Azure DevOps ライセンスに含まれています。 修正プログラムを生成すると、組織のAzure課金メーターから AI クレジットが消費されます。

修正プログラムの生成ごとにトークンが使用されます。これには、モデルに送信されるコード コンテキストの入力トークン、推奨される変更の出力トークン、既存のコンテキストを再利用するキャッシュされたトークンが含まれます。

課金を簡単にするために、これらのトークンは、GitHub AI クレジットと呼ばれる標準ユニットに変換されます。1 クレジットは $0.01 USD です。 料金は、Azure DevOps組織にリンクされているAzure サブスクリプションに課金され、Azure Cost Managementでは別のメーターとして表示されます。

各修正プログラムのコストは、周囲のコード コンテキストのサイズと変更の複雑さによって異なります。

Note

GitHub Copilot予算設定とGitHubで構成されたユーザー制限は、Azure DevOpsのCopilot Autofix メーターの支出には適用されません。 この使用量は、GitHub Copilot課金ではなく、Azure DevOps組織にリンクされているAzure サブスクリプションを通じて課金されます。

プロジェクト別の自動修正コストの表示

Copilot Autofix では、組織タグとプロジェクト タグがサポートされているため、使用料金をフィルター処理し、Azure DevOps プロジェクト間でコストを比較できます。

  1. Azure ポータルで、Azure DevOps組織にリンクされているサブスクリプションを開きます。 コスト管理>コスト分析に移動します。
  2. 確認する日付範囲を選択します。
  3. メーターフィルターを追加し、AzDO GAC の AI クレジットを選択します。 このフィルターは、Autofix の使用料金を他のサブスクリプション コストから分離します。
  4. _organizationname_ のタグ フィルターを追加し、コストを表示したい Azure DevOps 組織を選択します。
  5. グループ化 を _projectname_ タグに設定すると、プロジェクト別の自動修正コストの内訳が表示されます。

AzDO GAC メーターと組織の AI クレジットにフィルター処理された Azure コスト分析のスクリーンショット。コストはプロジェクト別にグループ化されています。

個々の日付を確認するには、粒度 を 日単位 に設定し、視覚化を テーブル に切り替えます。 メーターと組織のフィルターとプロジェクトのグループ化を維持します。 _projectname_ タグをフィルター処理して、テーブルを特定のプロジェクトに限定することもできます。

日付とプロジェクト別のAutofix コストを示す日次テーブル ビューの Azure コスト分析のスクリーンショット。AzDO GAC メーター、組織、選択したプロジェクトの AI クレジットにフィルター処理されています。

Copilot の自動修正を有効にする

Copilot自動修正は、組織、プロジェクト、またはリポジトリ のレベルで有効にすることができます。 より広範なスコープで自動修正を有効にすると、そのスコープ内のすべてのリポジトリに設定が適用されます。 設定を適用するリポジトリに基づいて自動修正を構成する場所を選択します。

Scope 自動修正を構成する場所
組織 組織の設定>Repositories を選択して、組織内のすべてのリポジトリに対して自動修正を有効にします。
Project Project設定>Repositories>すべてのリポジトリを選択して、project内のすべてのリポジトリに対して自動修正を有効にします。
リポジトリ Project設定>Repositories を選択し、そのリポジトリに対してのみ自動修正を有効にするリポジトリを選択します。

Copilot Autofix を有効にするには:

  1. Azure DevOps 組織 (https://dev.azure.com/{yourorganization}) にサインインします。
  2. 構成する組織、プロジェクト、またはリポジトリのスコープの設定ページに移動します。
  3. Advanced Security セクションで、Autofix for security alerts を探します。 スタンドアロン のCode Securityを使用する場合は、[ オプション] を選択して [ Code Security機能 ] パネルを開きます。
  4. セキュリティ アラートの自動修正 を選択します。 同じ設定で、対応するコード スキャンと依存関係スキャンのアラート向けの Copilot Autofix が有効になります。
  5. [コード セキュリティ機能] パネルを使用する場合は、[適用] を選択して変更を保存します。

バンドルされている高度なセキュリティとスタンドアロンのコード セキュリティ設定の両方のスクリーンショットについては、「Copilot自動修正の構成」を参照してください。

Autofix を有効にしても、スキャンを構成したり、修正内容が自動的に生成されたりすることはありません。 まず、コードスキャンまたは依存関係スキャンを構成します。 次に、対応しているアラートに修正を要求します。

アラートの修正プログラムを生成する

Copilot自動修正を有効にした後、サポートされているコード スキャン アラートまたは依存関係の脆弱性アラートに対して同じ手順を使用します。

  1. Repos>Advanced Security を選択します。
  2. コード スキャンまたは依存関係スキャンアラートの一覧を開き、アラートを選択して詳細ビューを開きます。
  3. 検出結果、影響を受けるコードまたは依存関係、修復ガイダンスを確認します。
  4. [ 修正プログラムの生成] を選択します。

次のコード スキャンの例は、共通のワークフローを示しています。 依存関係スキャンの例は、このセクションの後半で生成されたプルリクエストを示しています。

右上の [修正の生成] ボタンを使用したコード スキャン アラートの詳細ビューのスクリーンショット。

Copilot Autofix が修正作業を進めている間、アラート詳細ビューには修正が進行中であることが示されます。 Copilot Autofix は、修正の準備が整うとプル リクエストを作成します。

pull request を開く前に Copilot Autofix が修正に取り組んでいることを示す、コード スキャン アラートの詳細ビューのスクリーンショット。

Copilot Autofix は修正を生成し、copilot-autofix/... という名前のブランチからプル リクエストを作成します。 pull request には Copilot Autofix タグが付けられています。このタグを使用すると、pull requests リストで自動修正 pull request を識別できます。

同じアラートとブランチに対してアクティブにできる修正プログラムは 1 つだけです。 要求が保留中であるか、パイプラインが実行されている間は、 修正の生成 は使用できません。 別の要求が同時に送信された場合、アラートには修正プログラムが既に生成されていることが示されます。 アクティブな要求が成功または失敗した後に、別の修正プログラムを生成できます。

CodeQL アラートの場合、プル要求はアラートの詳細ビューの [関連するプル要求 ] の下に自動的に表示され、生成と完了の進行状況として引き続き更新されるため、ページを更新する必要はありません。

[関連するプル要求] の下のアクティブな自動修正プル要求を示すコード スキャン アラートの詳細ビューのスクリーンショット。

次の依存関係スキャンの例は、関連するプル要求 の下に、脆弱なパッケージに対するアクティブな自動修正プル要求を示しています。

[関連するプル リクエスト] の下の urllib3 脆弱性に対するアクティブな自動修正プル リクエストを示す依存関係スキャン アラートのスクリーンショット。

Copilot自動修正によってアラートのコード変更が生成されない場合、分岐またはプル要求は作成されません。また、アラートの詳細ビューでプル要求がリンクされることはありません。 この場合は、アラートを手動で修復します。 詳細については、「 修正プログラムは使用できません」を参照してください。

修正内容を確認してマージする

Copilot Autofix が作成するプル リクエストは、他の Azure Repos のプル リクエストと同様に動作します。 その説明は、修正プログラムが対処するアラートをまとめたものです。

Copilot Autofix によって作成されたプル リクエストのスクリーンショット。説明には、アラート ID、重大度、修正の詳細が表示されています。

Copilot自動修正ラベルは、自動修正プル要求を識別します。

  1. アラートの Related pull requests セクション、または Repos>Pull requests からプル要求を開きます。
  2. 影響を受けるすべてのファイルの [ ファイル ] タブで、提案された変更を確認します。
  3. コード スタイル、名前付け規則、またはプロジェクトの要件を一致させる必要がある場合は、変更を編集します。
  4. 通常のレビュー ワークフローを使用して、pull request を承認して完了します。

pull request をマージした後、マージされたターゲット ブランチで関連するスキャナーを実行します。 Copilot Autofix は、このマージ後のスキャンを実行しません。

修正済みの通知 マージ後に実行する内容
コード スキャン アラートを報告したのが CodeQL またはサード パーティ製スキャナーである場合は、それを実行し、更新された分析結果を Advanced Security に発行します。
依存関係の脆弱性 Advanced Security が更新された依存関係を処理できるように、依存関係スキャンを実行します。

プル要求のみをマージしても、アラートは閉じられません。 Advanced Security は、新しいスキャン結果を処理した後、アラートの状態を更新します。 これらの結果が脆弱性を報告しなくなったことを確認します。

Tip

生成された修正は、最終的な答えではなく、出発点です。 pull request を他の変更と同様に扱います。マージする前に、必要に応じて確認し、テストし、追加のレビュー担当者を要求します。

Copilot の自動修正の問題を解決する

進行中の修正

ほとんどのCopilot自動修正は約 2 ~ 5 分で完了します。 実行時間は、使用可能なパイプライン容量と変更の複雑さによって異なる場合があります。 すべての並列ジョブが使用されている場合、パイプラインはキューに残り、容量が使用可能になるまで、アラート は修正の進行中 を示し続けます。

パイプラインがキューに入る前に保留状態のリクエストは、30分後に失敗します。 キューに入っている、または実行中のパイプラインのタイムアウト時間は 2 時間です。 バックエンドのタイムアウトに達する前に、アラートの更新が自動的に停止する場合があります。 アラートが進行中の場合:

  1. アラートの詳細ページを更新します。
  2. 実行を表示が利用可能な場合は、パイプラインの実行を開き、キューに入っているか、実行中かを確認します。
  3. 要求が成功または失敗した状態になるまで待ちます。 既存の要求がアクティブな間は、別の要求を送信しないでください。
  4. 要求が失敗した場合は、エラー メッセージを確認し、原因に対処した後に [修正の再試行 ] を選択します。

プル要求は作成されましたが、アラートにリンクされていません

プル要求は、 関連するプル要求の下に表示される前に正常に作成できます。 アラートの詳細ページを更新します。 プル リクエストがまだ関連付けられていない場合は、Repos>Pull requests を選択し、次を探してください。

  • Copilot Autofix ラベル。
  • copilot-autofix/で始まるソース ブランチ。
  • アラートを参照するプル リクエストのタイトルまたは説明。

リンクがアラートに表示されない場合でも、通常の pull request ワークフローを通じて pull request を確認してマージします。

リポジトリまたはプル要求の操作が失敗する

Copilot Autofix では、アラートに関連付けられたブランチのシャロークローンを行います。 Git サブモジュールは初期化されません。 一意の名前 copilot-autofix/... ブランチを作成し、生成された変更をプッシュし、アラート ブランチを対象とするプル要求を開きます。

パイプライン ログを調べるには、アラートエラー状態からの 実行の表示 を使用します。 次の表に、一般的な原因とアクションを示します。

Failure 確認すべきこと
リポジトリまたはブランチを複製できない リポジトリとアラート ブランチがまだ存在することを確認します。 プル要求で検出されたアラートの場合、ソース ブランチとプル要求は引き続きアクティブである必要があります。 ブランチが削除された場合は、現在のブランチで関連するスキャナーを実行し、結果のアラートから修正を生成します。
この修正は、Git サブモジュール内のコードに依存します Copilot Autofix はサブモジュールを初期化しません。 必要なコード コンテキストがサブモジュールに格納されている場合は、アラートを手動で修復します。
既定のブランチが変更されたか、アラート ブランチが削除されました Copilot自動修正は、アラートに関連付けられているブランチを対象とします。これは、必ずしも現在の既定のブランチであるとは限りません。 目的のブランチで関連するスキャナーを実行し、そのブランチのアラートから修正プログラムを生成します。
修正ブランチを作成できない リポジトリのブランチ名の制限と、 GitHub Copilot ({organization}) ID の明示的な拒否アクセス許可を確認します。 copilot-autofix/ プレフィックスを持つブランチを許可します。 再試行により、新しい一意の名前付きブランチが作成されます。
ブランチ ポリシーによって変更がブロックされる Pull request 完了ポリシーは、他のプル要求と同様に、自動修正プル要求に適用されます。 完了する前に、必要なレビュー担当者と検証ポリシーを満たしてください。 リポジトリ ポリシーが最初のプッシュをブロックする場合は、自動修正 ID とブランチ プレフィックスを許可するようにポリシーを更新します。
生成されたコミットをプッシュできない ID の 投稿 および GitHub Copilot ({organization}) のアクセス許可 (明示的な拒否を含む) を確認します。 また、「 修正プログラムが生成されましたが、コミットまたはプッシュできませんでした」の説明に従って、コミット作成者の電子メール検証を確認します。
pull request を作成できません pull request へのコントリビューション権限と、 ID に対して GitHub Copilot ({organization}) ラベルを作成する権限を確認します。

修正プログラムが生成されましたが、コミットまたはプッシュできませんでした

Copilot自動修正では、コミット作成者の電子メールとしてnoreply@dev.azure.comが使用されます。 コミット作成者の電子メール検証ポリシーでこのアドレスが許可されていない場合、Copilot Autofix はコード変更を生成できますが、pull request を作成するためにコミットまたはプッシュすることはできません。

アラートの詳細ビューには、ブロックされたコミット作成者の電子メールを識別するエラーが表示されます。

コミット作成者の電子メールが許可されていないため、Copilot自動修正で生成された修正プログラムをコミットできなかったことを示すコード スキャン アラートのスクリーンショット。

コミット作成者の電子メール検証ポリシーで許可されている電子メール パターンに noreply@dev.azure.com を追加します。

  1. プロジェクト 設定>Repositories を選択します。
  2. [すべてのリポジトリ] を選択してプロジェクト レベルのポリシーを更新するか、ポリシーを持つリポジトリを選択します。
  3. [ポリシー] を選択します。
  4. [ リポジトリ ポリシー] で、[ 作成者の電子メールの検証のコミット] を見つけます。
  5. 許可されている電子メール パターンに noreply@dev.azure.com を追加します。
  6. アラートに戻り、[修正を再試行] を選択します。

許可されたコミット作成者の電子メール パターンに Copilot Autofix 電子メールを追加するリポジトリ ポリシー設定のスクリーンショット。

実行が失敗する

Copilot自動修正の実行を完了できない場合、アラートには顕著なエラー状態が表示されるため、実行が成功しなかったことをすぐに確認できます。 エラー状態から、実行を再試行して新しい修正プログラムを生成できます。

Copilot自動修正の実行が失敗した状態で実行を再試行するオプションを示すコード スキャン アラートのスクリーンショット。

一時的な理由や、実行で使用可能なコード変更が生成されない場合は、実行が失敗する可能性があります。 実行を再試行して、修正プログラムをもう一度生成します。

修正プログラムをマージした後もアラートは開いたままです

自動修正プル要求をマージしても、アラート自体は閉じられません。 Advanced Security には、検出結果を報告したスキャナーからの新しい結果が必要です。 アラートが開いたままの場合:

  1. プル要求が、アラートが検出されたのと同じブランチにマージされたことを確認します。
  2. 必要に応じて、コード スキャンまたは依存関係スキャンがマージ後に実行され、マージされたコミットが分析されたことを確認します。
  3. Advanced Security が正しいリポジトリとブランチの更新された結果を処理したことを確認してください。
  4. 新しい結果を確認して、脆弱性が検出されなくなったことを確認します。
  5. 脆弱性が引き続き存在する場合は、修正を更新し、関連するスキャナーをもう一度実行します。

修正プログラムは使用できません

Copilot自動修正では、すべてのアラートに対して修正プログラムを生成することはできません。 次の場合、修正プログラムを使用できない場合があります。

  • アラートの種類は現在、Copilot Autofix ではサポートされていません。
  • Copilotは、アラートが誤検知である可能性があることを判断します。
  • Copilot自動修正は実行されますが、コードの変更は生成されません。 この場合、ブランチまたはプル要求は作成されません。

Copilot自動修正によって、アラートが誤検知である可能性があり、変更が生成されないと判断された場合、アラートの詳細ビューに結果が表示されます。 実行を確認するか、修正を再試行できます。

コード スキャン アラートの詳細ビューのスクリーンショット。Copilot がそのアラートは誤検知の可能性があると判断し、修正を提示しなかったこと、および実行結果を表示するか修正を再試行するためのオプションが表示されています。

修正を使用できない場合は、アラートの対処ガイダンスを使用して手動で修正します。 結果を確認し、適切な却下理由を判断した後にのみ、アラートを却下します。 詳細については、「コード スキャンアラートの詳細」および「依存関係スキャンアラートの詳細」を参照してください。