GitHub Advanced Security for Azure DevOps を構成する
GitHub Advanced Security for Azure DevOps により、GitHub Advanced Security の一連のセキュリティ機能が Azure Repos に追加されます。
GitHub Advanced Security for Azure DevOps には以下が含まれています。
- シークレット スキャン プッシュ保護: コード プッシュに資格情報などのシークレットを公開するコミットが含まれているかどうかを検査する
- シークレット スキャン リポジトリのスキャン: リポジトリをスキャンし、誤ってコミットされた公開済みのシークレットを探す
- 依存関係のスキャン – オープンソース依存関係の既知の脆弱性を検索する (直接および推移的)
- コード スキャン – CodeQL 静的分析エンジンを使用して、SQL インジェクションや認証バイパスなどのコード レベルのアプリケーションの脆弱性を特定する
現時点では、GitHub Advanced Security for Azure DevOps は Azure DevOps サービスでのみ使用でき、この製品を Azure DevOps Server に導入する予定はありません。 GitHub Advanced Security for Azure DevOps はコード Git リポジトリでのみ使用できます。
GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用する場合は、「GitHub 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 バンドルがエージェントのエージェント ツール キャッシュにインストールされていることを確認します。
enableAutomaticCodeQLInstall: true
変数を YAML パイプラインのAdvanced-Security-CodeQL@1
パイプライン タスクと併用することも、クラシック パイプラインのEnable automatic CodeQL detection and installation
チェックボックスをオンにすることもできます。 手動インストール手順については、「GitHub Advanced Security for Azure DevOps のコード スキャン」を参照してください。
GitHub Advanced Security を有効にする
組織、プロジェクト、またはリポジトリのレベルで Advanced Security を有効にすることができます。 各スキャン ツールと結果にアクセスするには、まず Advanced Security を有効にする必要があります。 Advanced Security を有効にすると、このポリシーが有効になっているリポジトリへのシークレットを含む今後のプッシュはブロックされ、リポジトリ シークレットのスキャンはバックグラウンドで実行されます。
リポジトリ レベルのオンボード
- Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
- [Repos]>[リポジトリ] を選択します。
- Advanced Security を有効にするリポジトリを選択します。
- [有効] を選択し、課金を開始して Advanced Security をアクティブにします。 Advanced Security が有効になっているリポジトリのリポジトリ ビューにシールド アイコンが表示されるようになりました。
プロジェクト レベルのオンボード
- Azure DevOps プロジェクトの [プロジェクト設定] に移動します。
- [リポジトリ] を選びます。
- [Settings](設定) タブを選択します。
- [すべて有効にする] を選択すると、プロジェクトのアクティブなコミッターの数の見積もりが表示されます。
- [課金の開始] を選択して、プロジェクト内のすべての既存のリポジトリに対して Advanced Security をアクティブにします。
- 必要に応じて、[新しいリポジトリに対して Advanced Security を自動的に有効にする] を選択して、新しく作成されたリポジトリの作成時に Advanced Security を有効にします。
組織レベルのオンボード
- Azure DevOps 組織の [組織の設定] に移動します。
- [リポジトリ] を選択します。
- [すべて有効にする] を選択すると、組織のアクティブなコミッターの数の見積もりが表示されます。
- [課金の開始] を選択して、組織の各プロジェクトで、すべての既存のリポジトリに対して Advanced Security をアクティブにします。
- 必要に応じて、[新しいリポジトリに対して Advanced Security を自動的に有効にする] を選択して、新しく作成されたプロジェクトの作成時に Advanced Security を有効にします。
シークレット スキャンを設定する
Advanced Security を有効にすると、シークレット スキャンのプッシュ保護とリポジトリ スキャンが自動的に有効になります。 リポジトリ設定ページからシークレット プッシュ保護を有効または無効にすることができます。
前述のように、シークレット スキャンとリポジトリ スキャンは、選択したリポジトリに対して Advanced Security を有効にすると自動的に開始されます。
依存関係スキャンを設定する
依存関係スキャンは、パイプライン ベースのスキャン ツールです。 結果はリポジトリごとに集計されます。 スキャンするすべてのパイプラインに依存関係スキャン タスクを追加することをお勧めします。
ヒント
最も正確なスキャン結果を得るには、スキャンするコードをビルドするパイプラインのビルドおよび/または復元手順に従って、依存関係スキャン タスクを追加してください。
タスク Advanced Security の依存関係スキャン (AdvancedSecurity-Dependency-Scanning@1) を YAML パイプライン ファイルに直接追加するか、タスク アシスタントから Advanced Security の依存関係スキャン タスクを選択します。
コード スキャンを設定する
コード スキャンは、結果がリポジトリごとに集約されるパイプライン ベースのスキャン ツールでもあります。
ヒント
コード スキャン タスクをメインの運用パイプラインの別のクローン パイプラインに追加するか、新しいパイプラインを作成することをお勧めします。 これは、コード スキャンがより時間のかかるビルド タスクになる可能性があるためです。
タスクを次の順序で追加します。
- Advanced Security Initialize CodeQL (AdvancedSecurity-Codeql-Init@1)
- カスタム ビルド ステップ
- Advanced Security Perform CodeQL Analysis (AdvancedSecurity-Codeql-Analyze@1)
さらに、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 スキャンも必要です。 プル要求ブランチのアラートの解決の詳細については、「プル要求の依存関係スキャン アラートの管理」および「プル要求のコード スキャン アラートの管理」を参照してください。
何らかの理由で [高度なセキュリティ] を無効にする必要がある場合、アラートとアラートの状態は、次回リポジトリで [高度なセキュリティ] を再度有効にするときまで [高度なセキュリティ] タブで保持されます。