分享方式:


設定適用於 Azure DevOps 的 GitHub Advanced Security

適用於 Azure DevOps 的 GitHub 進階安全性會將 GitHub 進階安全性功能套件新增至 Azure Repos。

適用於 Azure DevOps 的 GitHub 進階安全性包括:

  • 秘密掃描推播保護:檢查程式代碼推送是否包含公開秘密的認可,例如認證
  • 秘密掃描存放庫掃描:掃描您的存放庫,並尋找意外認可的公開秘密
  • 相依性掃描 – 搜尋 開放原始碼 相依性中的已知弱點(直接和可轉移)
  • 程式代碼掃描 – 使用 CodeQL 靜態分析引擎來識別程式代碼層級的應用程式弱點,例如 SQL 插入式和驗證略過

目前,Azure DevOps 的 GitHub 進階安全性僅適用於 Azure DevOps Services,而且沒有將本產品帶入 Azure DevOps Server 的計劃。 適用於 Azure DevOps 的 GitHub 進階安全性也僅適用於程式代碼 Git 存放庫。

適用於 Azure DevOps 的 GitHub 進階安全性可與 Azure Repos 搭配運作。 如果您想要搭配 GitHub 存放庫使用 GitHub 進階安全性,請參閱 GitHub 進階安全性

必要條件

您必須擁有配置為 Project Collection Administrators 群組成員的許可權。 若要將成員新增至專案集合管理員群組或變更專案集合層級權限,請參閱變更專案集合層級權限

自我裝載代理程式的額外必要條件

如果您的組織使用自我裝載的代理程式,則有更多需求:

  • 將這些 URL 新增至您的 Allowlist,以允許相依性掃描工作擷取弱點諮詢數據。 深入了解 允許的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 變數搭配 Advanced-Security-CodeQL@1 YAML 管線的管線工作,或選取 Enable automatic CodeQL detection and installation 傳統管線的複選框。 或者,如需手動安裝指示,請參閱 Azure DevOps 的 GitHub 進階安全性程式碼掃描。

啟用 GitHub 進階安全性

您可以在組織、專案或存放庫層級啟用進階安全性。 若要存取每個掃描工具和結果,您必須先啟用進階安全性。 啟用進階安全性之後,任何未來包含秘密的推送都會封鎖此原則啟用的存放庫,而存放庫秘密掃描會在背景進行。

存放庫層級上線

  1. 移至 Azure DevOps 專案的 Project 設定
  2. 選取 [存放庫存放>庫]。
  3. 選取您要啟用進階安全性的存放庫。
  4. 選取 [啟用] 和 [開始計費] 以啟用 [進階安全性]。 已啟用進階安全性的任何存放庫檢視中現在會出現盾牌圖示。

啟用 GitHub 進階安全性的螢幕快照。

專案層級上線

  1. 移至 Azure DevOps 專案的 Project 設定
  2. 選取 [ 存放庫]。
  3. 選取 [設定] 索引標籤。
  4. 選取 [ 全部 啟用],並查看專案作用中認可者數目的估計值。
  5. 選取 [ 開始計費 ] 以啟用專案中每個現有存放庫的進階安全性。
  6. 選擇性地選取 [自動為新的存放庫 啟用進階安全性],讓任何新建立的存放庫在建立時啟用進階安全性。

進階安全性專案層級啟用的螢幕快照。

組織層級上線

  1. 移至 Azure DevOps 組織的組織設定
  2. 選取 [存放庫]
  3. 選取 [ 全部 啟用],並查看您組織作用中認可者數目的估計值。
  4. 選取 [ 開始計費 ],為組織中的每個專案中的每個現有存放庫啟用進階安全性。
  5. 或者,針對新的存放庫選取 [自動啟用進階安全性],讓任何新建立的專案在建立時啟用進階安全性。

進階安全性組織層級啟用的螢幕快照。

設定秘密掃描

當您開啟進階安全性時,會自動啟用秘密掃描推播保護和存放庫掃描。 您可以從存放庫設定頁面啟用或停用秘密推送保護。

啟用推播保護的螢幕快照。

如前所述,啟用所選存放庫的進階安全性時,會自動啟動秘密掃描存放庫掃描。

設定相依性掃描

相依性掃描是管線型的掃描工具。 結果會按存放庫彙總。 建議您將相依性掃描工作新增至您想要掃描的所有管線。

提示

如需最精確的掃描結果,請務必遵循建置步驟和/或管線的套件還原步驟來新增相依性掃描工作,以建置您想要掃描的程序代碼。

將進階安全性相依性掃描工作 (AdvancedSecurity-Dependency-Scanning@1) 直接新增至 YAML 管線檔案,或從工作助理選取進階安全性相依性掃描工作。

YAML 的相依性掃描管線設定螢幕快照。

設定程式碼掃描

程式碼掃描也是管線型的掃描工具,其中結果會按存放庫彙總。

提示

建議您將程式代碼掃描工作新增至主要生產管線的個別複製管線,或建立新的管線。 這是因為程式代碼掃描可能是更耗時的建置工作。

依下列順序新增工作:

  1. 進階安全性初始化 CodeQL (AdvancedSecurity-Codeql-Init@1
  2. 您的自訂建置步驟
  3. 進階安全性執行 CodeQL 分析 (AdvancedSecurity-Codeql-Analyze@1

YAML 程式代碼掃描管線設定的螢幕快照。

此外,您必須指定您在初始化 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 的程式代碼QL 分析目前為 Beta 版。 在 Beta 版期間,這些語言的分析將比對其他人的 CodeQL 分析更全面。 使用 java 來分析以 Java、Kotlin 或兩者撰寫的程式代碼。 使用 javascript 來分析以 JavaScript、TypeScript 或兩者撰寫的程式代碼。

如果需要指定的 cpp, java, csharp 語言或 swift 自定義建置步驟。

設定提取要求批注

針對相依性掃描和程式代碼掃描,批注會自動針對提取要求進行設定,其中建置驗證原則會套用至管線中的相依性掃描和/或程式代碼掃描工作。 如需設定組建驗證原則的詳細資訊,請參閱 建置驗證

提取要求批注也需要預設分支和目標分支上的進階安全性掃描,然後才掃描您的來源 (提取要求) 分支。 如需解決提取要求分支警示的詳細資訊,請參閱 管理提取要求的 相依性掃描警示和 管理提取要求的程式代碼掃描警示。

如果基於任何原因,您需要停用進階安全性,則下次重新啟用存放庫的 [進階安全性] 時,將會保留 [進階安全性] 索引卷標的任何警示和狀態。

下一步