次の方法で共有


GitHub Advanced Security for Azure DevOps を構成する

GitHub Advanced Security for Azure DevOps は、GitHub Advanced Security のセキュリティ機能スイートを Azure Repos に追加し、次の機能を備えています。

  • シークレット スキャン プッシュ保護: コード プッシュに資格情報などのシークレットを公開するコミットが含まれているかどうかを検査する
  • シークレット スキャン リポジトリのスキャン: リポジトリをスキャンし、誤ってコミットされた公開済みのシークレットを探す
  • 依存関係のスキャン – オープンソース依存関係の既知の脆弱性を検索する (直接および推移的)
  • コード スキャン – CodeQL 静的分析エンジンを使用して、SQL インジェクションや認証バイパスなどのコード レベルのアプリケーションの脆弱性を特定する

リポジトリに対して適切なレベルの保護を可能にする柔軟性を備えた Advanced Security の保護を企業に提供できます。 Azure DevOps の GitHub Advanced Security は、Azure DevOps 用の GitHub Secret Protection および Azure DevOps 用の GitHub Code Security として利用できます。

シークレット保護には、次の機能が含まれています。

  • プッシュ保護:シークレットリークが発生する前に防ぐ
  • 通知を含むシークレット スキャン アラートを使用して、問題になる前に既存の露出をキャッチする
  • セキュリティの概要。組織のリスクとセキュリティ保護のレベルに関する分析情報を提供します

コード セキュリティには、次の機能が含まれています。

  • オープン ソースの依存関係の脆弱性を見つけるための依存関係アラート
  • コード内の脆弱性を直接検出するための CodeQL スキャン
  • サード パーティ製ツールのセキュリティに関する調査結果
  • セキュリティの概要。組織のリスクとセキュリティ保護のレベルに関する分析情報を提供します

Azure DevOps の GitHub Advanced Security は、Azure DevOps Services でのみ、特にコード Git リポジトリでのみ使用できます。

GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用するには、GitHub Advanced Security をご覧ください。

前提条件

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

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

セルフホステッド エージェントの追加の前提条件

組織でセルフホステッド エージェントを使用している場合は、依存関係スキャン タスクが脆弱性アドバイザリ データをフェッチできるように、次の URL を許可リストに追加します。 詳細については、「 許可される IP アドレスとドメイン URL」を参照してください

ドメイン URL 説明
https://governance.dev.azure.com dev.azure.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://dev.azure.com dev.azure.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://advsec.dev.azure.com dev.azure.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://{organization_name}.governance.visualstudio.com {organization_name}.visualstudio.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://{organization_name}.visualstudio.com  {organization_name}.visualstudio.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://{organization_name}.advsec.visualstudio.com {organization_name}.visualstudio.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
  • 互換性のあるバージョンの .NET ランタイム (現在は .NET 8.x) を実行します。 互換性のあるバージョンがエージェントに存在しない場合、依存関係スキャン ビルド タスクによって .NET がダウンロードされます。

  • CodeQL バンドルがエージェントのエージェント ツール キャッシュにインストールされていることを確認します。 YAML パイプラインのenableAutomaticCodeQLInstall: true パイプライン タスクで AdvancedSecurity-Codeql-Init@1 変数を使用するか、クラシック パイプラインの Enable automatic CodeQL detection and installation チェックボックスをオンにします。 手動インストール手順については、「GitHub Advanced Security for Azure DevOps のコード スキャン」を参照してください。

GitHub Advanced Security を有効にする

組織、プロジェクト、またはリポジトリのレベルで Advanced Security を有効にすることができます。 各スキャン ツールと結果にアクセスするには、まず Advanced Security を有効にする必要があります。 Advanced Security を有効にすると、このポリシーが有効になっているリポジトリへのシークレットを含む今後のプッシュはブロックされ、リポジトリ シークレットのスキャンはバックグラウンドで実行されます。

リポジトリレベルの導入プロセス

  1. Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
  2. [Repos]>[リポジトリ] を選択します。
  3. Advanced Security を有効にするリポジトリを選択します。
  4. [有効] を選択し、課金を開始して Advanced Security をアクティブにします。 Advanced Security が有効になっているリポジトリのリポジトリ ビューにシールド アイコンが表示されるようになりました。

GitHub Advanced Security の有効化のスクリーンショット。

プロジェクトレベルの導入プロセス

  1. Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
  2. [リポジトリ] を選びます。
  3. [Settings](設定) タブを選択します。
  4. [すべて有効にする] を選択すると、プロジェクトのアクティブなコミッターの数の見積もりが表示されます。
  5. [課金の開始] を選択して、プロジェクト内のすべての既存のリポジトリに対して Advanced Security をアクティブにします。
  6. 必要に応じて、[新しいリポジトリに対して Advanced Security を自動的に有効にする] を選択して、新しく作成されたリポジトリの作成時に Advanced Security を有効にします。

Advanced Security 向けのプロジェクト レベルの有効化のスクリーンショット。

組織全体のオリエンテーション

  1. Azure DevOps 組織の [組織の設定] に移動します。
  2. [リポジトリ] を選択します。
  3. [すべて有効にする] を選択すると、組織のアクティブなコミッターの数の見積もりが表示されます。
  4. [課金の開始] を選択して、組織の各プロジェクトで、すべての既存のリポジトリに対して Advanced Security をアクティブにします。
  5. 必要に応じて、[新しいリポジトリに対して Advanced Security を自動的に有効にする] を選択して、新しく作成されたプロジェクトの作成時に Advanced Security を有効にします。

Advanced Security 向けの組織レベルの有効化のスクリーンショット。

シークレット スキャンを設定する

Advanced Security を有効にすると、シークレット スキャンのプッシュ保護とリポジトリ スキャンが自動的に有効になります。 リポジトリ設定ページからシークレット プッシュ保護を有効または無効にすることができます。

プッシュ保護を有効にするスクリーンショット。

選択したリポジトリに対して Advanced Security を有効にすると、シークレット スキャン リポジトリのスキャンが自動的に開始されます。

依存関係スキャンを設定する

Secret Protection または Code Security は、組織、プロジェクト、またはリポジトリ レベルで有効にすることができます。

リポジトリレベルの導入プロセス

  1. Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
  2. [Repos]>[リポジトリ] を選択します。
  3. Advanced Security を有効にするリポジトリを選択します。
  4. シークレット保護またはコード セキュリティを切り替えます。
  5. [ 請求の開始] を選択します。 いずれかの製品が有効になっているリポジトリのリポジトリ ビューにシールド アイコンが表示されるようになりました。
  6. 必要に応じて 、依存関係スキャンの既定のセットアップを有効にするには、[ オプション] を選択し、[依存関係スキャンの既定のセットアップ] チェック ボックスをオンにします。

GitHub Advanced Security の有効化のスクリーンショット。

プロジェクトレベルの導入プロセス

  1. Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
  2. [リポジトリ] を選びます。
  3. [Settings](設定) タブを選択します。
  4. [ すべて有効にする] を 選択すると、プロジェクトの製品あたりのアクティブなコミッターの数の見積もりが表示されます。
  5. シークレット保護またはコード セキュリティの目的の製品を切り替えます。
  6. [ 課金の開始 ] を選択して、プロジェクト内のすべての既存のリポジトリに対して Secret Protection や Code Security をアクティブ化します。
  7. 必要に応じて、[ 新しいリポジトリに対して Advanced Security を自動的に有効にする ] を切り替えて、新しく作成されたリポジトリの作成時に Secret Protection または Code Security が有効になるようにします。

Advanced Security 向けのプロジェクト レベルの有効化のスクリーンショット。

組織全体のオリエンテーション

  1. Azure DevOps 組織の [組織の設定] に移動します。
  2. [リポジトリ] を選択します。
  3. [ すべて有効にする] を 選択し、組織の製品ごとのアクティブなコミッターの数の見積もりが表示されます。
  4. シークレット保護またはコード セキュリティの目的の製品を切り替えます。
  5. [課金の開始] を選択して、組織の各プロジェクトで、すべての既存のリポジトリに対して Advanced Security をアクティブにします。
  6. 必要に応じて、[ 新しいリポジトリに対して Advanced Security を自動的に有効にする ] を切り替えて、新しく作成されたプロジェクトの作成時に Secret Protection または Code Security が有効になるようにします。

Advanced Security 向けの組織レベルの有効化のスクリーンショット。

シークレット スキャンを設定する

シークレットスキャンプッシュ保護とリポジトリスキャンは、シークレット保護を有効にすると自動的に有効になります。 リポジトリ設定ページからシークレット プッシュ保護を有効または無効にすることができます。

プッシュ保護を有効にするスクリーンショット。

前述のように、シークレット スキャン リポジトリのスキャンは、選択したリポジトリに対して Secret Protection を有効にすると自動的に開始されます。

依存関係スキャンを設定する

依存関係スキャン機能にアクセスするには、リポジトリに対して Code Security 製品が有効になっている必要があります。

依存関係スキャンは、パイプライン ベースのスキャン ツールです。 結果はリポジトリごとに集計されます。 スキャンするすべてのパイプラインに依存関係スキャン タスクを追加することをお勧めします。

ヒント

最も正確なスキャン結果を得るには、スキャンするコードをビルドするパイプラインのビルドステップまたはパッケージ復元ステップの後に依存関係スキャン タスクを追加します。

タスク Advanced Security の依存関係スキャン (AdvancedSecurity-Dependency-Scanning@1) を YAML パイプライン ファイルに直接追加するか、タスク アシスタントから Advanced Security の依存関係スキャン タスクを選択します。

YAML の依存関係スキャン パイプライン設定のスクリーンショット。

コード スキャンを設定する

コード スキャン機能にアクセスするには、リポジトリに対して Code Security 製品が有効になっている必要があります。

コード スキャンは、結果がリポジトリごとに集約されるパイプライン ベースのスキャン ツールでもあります。

ヒント

コード スキャンは時間のかかるビルド タスクになる可能性があるため、コード スキャン タスクをメイン運用パイプラインの複製された別のパイプラインに追加するか、新しいパイプラインを作成することをお勧めします。

タスクを次の順序で追加します。

  1. Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. カスタム ビルド ステップ
  3. 上級セキュリティでCodeQL分析を実行する (AdvancedSecurity-Codeql-Analyze@1)

YAML のコード スキャン パイプライン設定のスクリーンショット。

また、 Initialize CodeQL タスクで分析する言語を指定します。 コンマ区切りリストを使用すると、複数の言語を一度に分析できます。 サポートされる言語は、csharp, cpp, go, java, javascript, python, ruby, swift です。 セルフホステッド エージェントを使用している場合は、 enableAutomaticCodeQLInstall: true 変数を追加して、エージェントの最新の CodeQL ビットを自動的にインストールすることもできます。

スターター パイプラインの例を次に示します。

trigger:
  - main

pool:
  # Additional hosted image options are available: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted#software
  vmImage: ubuntu-latest

steps:

  - task: AdvancedSecurity-Codeql-Init@1
    inputs:
      languages: "java"
      # Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
      # You can customize the initialize task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
      # If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
      enableAutomaticCodeQLInstall: true

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.

# If you had a Maven app:
#   - task: Maven@4
#     inputs:
#       mavenPomFile: 'pom.xml'
#       goals: 'clean package'
#       publishJUnitResults: true
#       testResultsFiles: '**/TEST-*.xml'
#       javaHomeOption: 'JDKVersion'
#       jdkVersionOption: '1.17'
#       mavenVersionOption: 'Default'

# Or a general script:
#   - script: |
#       echo "Run, Build Application using script"
#       ./location_of_script_within_repo/buildscript.sh

  - task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines

  - task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines

ヒント

Kotlin/Swift の CodeQL 分析は現在ベータ版です。 ベータ期間中、これらの言語の分析は、他の言語の CodeQL 分析よりも包括的ではありません。

  • Java、Kotlin、またはその両方で記述されたコードを分析するには java を使用します。
  • JavaScript、TypeScript、またはその両方で記述されたコードを分析するには、javascript を使用します。

指定した言語が cpp, java, csharp または swiftの場合は、カスタム ビルド手順が必要です。

プル要求注釈を設定する

依存関係スキャンとコード スキャンの両方について、注釈はプル要求に対して自動的に構成されます。この場合、ビルド検証ポリシーは、パイプラインに含まれる依存関係スキャンタスクやコード スキャン タスクと共に適用されます。 ビルド検証ポリシーの構成の詳細については、「ビルド検証」を参照してください。

また、プル要求注釈では、ソース (pull request) ブランチをスキャンする前に、既定のブランチとターゲット ブランチに対する Advanced Security スキャンも必要です。 プル要求ブランチのアラートの解決の詳細については、「プル要求の依存関係スキャン アラートの管理」および「プル要求のコード スキャン アラートの管理」を参照してください。

Advanced Security を無効にするには、次回リポジトリの Advanced Security を再度有効にするときに、アラートとアラートの状態が [セキュリティの詳細設定] タブに保持されます。