共用方式為


設定適用於 Azure DevOps 的 GitHub Advanced Security

GitHub Advanced Security for Azure DevOps 會將 GitHub Advanced Security 的安全性功能套件新增至 Azure Repos,並包含下列功能:

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

適用於 Azure DevOps 的 GitHub 進階安全性僅適用於 Azure DevOps Services,特別是適用於程式代碼 Git 存放庫。

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

必要條件

類別 需求
許可 - 若要檢視存放庫的所有警示摘要:存放庫的參與者 許可權。
- 若要關閉進階安全性中的警示:專案管理員 許可權。
- 若要管理進階安全性中的許可權:必須是 專案集合系統管理員 群組的成員或擁有 進階安全性: 管理設定 許可權設為 允許

如需進階安全性許可權的詳細資訊,請參閱 管理進階安全性許可權

自行架設代理程式的額外前提條件

如果您的組織使用自我裝載的代理程式,請將下列 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 套件組合已安裝至代理程式的工具快取中。 您可以在 YAML 管線中使用 enableAutomaticCodeQLInstall: true 變數搭配 AdvancedSecurity-Codeql-Init@1 管線工作,或在傳統管線中選取 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 程式代碼掃描管線設定的螢幕快照。

此外,請指定您要在 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 的程式代碼QL 分析目前為 Beta 版。 在 Beta 版期間,這些語言的分析比其他語言的 CodeQL 分析還不全面。

  • 使用 java 來分析以 Java、Kotlin 或兩者撰寫的程式代碼。
  • 使用 javascript 來分析以 JavaScript、TypeScript 或兩者撰寫的程式代碼。

如果指定的語言為 cpp, java, csharpswift,則需要自定義建置步驟。

設定提取要求批注

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

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

若要停用進階安全性,下次重新啟用存放庫的 [進階安全性] 時,會在 [進階安全性] 索引標籤中保留任何警示和警示狀態。