GitHub Advanced Security for Azure DevOps を構成する

GitHub Advanced Security for Azure DevOps により、GitHub Advanced Security の一連のセキュリティ機能が Azure Repos に追加されます。

GitHub Advanced Security for Azure には、次のものが含まれます。

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

現時点では、GitHub Advanced Security for Azure DevOps は Azure DevOps サービスでのみ使用でき、この製品を Azure DevOps Server に導入する予定はありません。

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

前提条件

プロジェクト コレクション管理者グループのメンバーとして割り当てられたアクセス許可が必要です。 プロジェクト コレクション管理者グループにメンバーを追加するか、プロジェクト コレクション レベルのアクセス許可を変更するには、プロジェクト コレクション レベルのアクセス許可の変更に関するページを参照してください。

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

組織でセルフホステッド エージェントを使用している場合は、さらに多くの要件があります。

  • これらの URL を許可リストに追加して、依存関係スキャン タスクで脆弱性アドバイザリ データをフェッチできるようにします。 詳細については、「許可される IP アドレスとドメイン URL」を参照してください。
ドメイン URL 説明
https://governance.dev.azure.com/{organization_name} dev.azure.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://dev.azure.com/{organization_name} dev.azure.com ドメインを使用して DevOps インスタンスにアクセスする組織向け
https://advsec.dev.azure.com/{organization_name} 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 6.0.x) を実行します。 互換性のあるバージョンがエージェントに存在しない場合、依存関係スキャン ビルド タスクによって .NET がダウンロードされます。

  • GitHub で入手できるアーキテクチャのセットアップ スクリプトを使用して、CodeQL バンドルをエージェント ツール キャッシュにインストールします。 これらのスクリプトでは、$AGENT_TOOLSDIRECTORY 環境変数をエージェントのエージェント ツール ディレクトリの場所に設定する必要があります (たとえば、C:/agent/_work/_tool)。 または、次の手順を手動で実装することもできます。

    1. GitHub から最新の CodeQL リリース バンドルを選択します。
    2. バンドルをダウンロードし、エージェント ツール ディレクトリ (通常は _work/_tool の下にあります) 内のディレクトリ (./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/) に解凍します。 v2.16.0の現在のリリースを使用すると、フォルダー名は ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/ になります。 エージェント ツール ディレクトリの詳細は、こちらを参照してください。
    3. x64.complete という名前の空のファイルを ./CodeQL/0.0.0-[codeql-release-bundle-tag] フォルダーで作成します。 前の例を使用すると、x64.complete ファイルへのエンド ファイル パスは ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete になります。

GitHub Advanced Security を有効にする

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

リポジトリ レベルのオンボード

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

Screenshot of enabling GitHub Advanced Security.

プロジェクト レベルのオンボード

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

Screenshot of project-level enablement for Advanced Security.

組織レベルのオンボード

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

Screenshot of org-level enablement for Advanced Security.

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

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

Screenshot of enabling push protection.

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

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

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

ヒント

最も正確なスキャン結果を得るには、スキャンするコードをビルドするパイプラインのビルド手順に従って、依存関係スキャン タスクを追加してください。

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

Screenshot of dependency scanning pipeline setup for YAML.

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

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

ヒント

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

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

  1. Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
  2. カスタム ビルド ステップ
  3. Advanced Security Perform CodeQL Analysis (AdvancedSecurity-Codeql-Analyze@1)

Screenshot of code scanning pipeline setup for YAML.

さらに、CodeQL の初期化タスクで分析する言語を指定する必要があります。 コンマ区切りリストを使用すると、複数の言語を一度に分析できます。 サポートされる言語は、csharp, cpp, go, java, javascript, python, ruby, swift です。

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

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

#   Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you are 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. 

# 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 の場合、カスタムまたは AutoBuild ビルド ステップが必要です。 他の言語の場合、AutoBuild が含まれていれば、何もしなくてもステップは正常に完了します。

何らかの理由で Advanced Security を無効にする必要がある場合は、アラートとアラートの状態は、次回リポジトリで Advanced Security を再度有効にするときまで保持されます。

次のステップ