設定適用於 Azure DevOps 的 GitHub Advanced Security

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

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

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

目前,Azure DevOps 的 GitHub 進階安全性僅適用於 Azure DevOps Services,而且沒有將本產品帶入 Azure DevOps Server 的計劃。

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

必要條件

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

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

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

  • 將這些 URL 新增至您的 Allowlist,以允許相依性掃描工作擷取弱點諮詢數據。 深入了解 允許的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 進階安全性

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

存放庫層級上線

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

Screenshot of enabling GitHub Advanced Security.

專案層級上線

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

Screenshot of project-level enablement for Advanced Security.

組織層級上線

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

Screenshot of org-level enablement for Advanced Security.

設定秘密掃描

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

Screenshot of enabling push protection.

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

設定相依性掃描

相依性掃描是以管線為基礎的掃描工具。 每個存放庫會匯總結果。 建議您將相依性掃描工作新增至您想要掃描的所有管線。

提示

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

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

Screenshot of dependency scanning pipeline setup for YAML.

設定程式碼掃描

程式代碼掃描也是管線型掃描工具,每個存放庫會匯總結果。

提示

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

依下列順序新增工作:

  1. 進階安全性初始化 CodeQL (AdvancedSecurity-Codeql-Init@1
  2. 您的自定義建置步驟
  3. 進階安全性執行 CodeQL 分析 (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 的程式代碼QL 分析目前為 Beta 版。 在 Beta 版期間,這些語言的分析將比對其他人的 CodeQL 分析更全面。 使用 java 來分析以 Java、Kotlin 或兩者撰寫的程式代碼。 使用 javascript 來分析以 JavaScript、TypeScript 或兩者撰寫的程式代碼。

如果指定的語言為 cpp, java, csharpswift 自定義或 AutoBuild 建置步驟,則為必要專案。 若為其他語言,如果包含 AutoBuild,則步驟會順利完成,而不需要執行任何動作。

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

下一步