設定適用於 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 進階安全性
您可以在組織、專案或存放庫層級啟用進階安全性。 若要存取每個掃描工具和結果,您必須先啟用進階安全性。 啟用進階安全性之後,任何未來包含秘密的推送都會封鎖此原則啟用的存放庫,而存放庫秘密掃描會在背景進行。
存放庫層級上線
- 移至 Azure DevOps 專案的 Project 設定 。
- 選取 [存放庫存放>庫]。
- 選取您要啟用進階安全性的存放庫。
- 選取 [啟用] 和 [開始計費] 以啟用 [進階安全性]。 已啟用進階安全性的任何存放庫檢視中現在會出現盾牌圖示。
專案層級上線
- 移至 Azure DevOps 專案的 Project 設定 。
- 選取 [ 存放庫]。
- 選取 [設定] 索引標籤。
- 選取 [ 全部 啟用],並查看專案作用中認可者數目的估計值。
- 選取 [ 開始計費 ] 以啟用專案中每個現有存放庫的進階安全性。
- 選擇性地選取 [自動為新的存放庫 啟用進階安全性],讓任何新建立的存放庫在建立時啟用進階安全性。
組織層級上線
- 移至 Azure DevOps 組織的組織設定 。
- 選取 [存放庫]。
- 選取 [ 全部 啟用],並查看您組織作用中認可者數目的估計值。
- 選取 [ 開始計費 ],為組織中的每個專案中的每個現有存放庫啟用進階安全性。
- 或者,針對新的存放庫選取 [自動啟用進階安全性],讓任何新建立的專案在建立時啟用進階安全性。
設定秘密掃描
當您開啟進階安全性時,會自動啟用秘密掃描推播保護和存放庫掃描。 您可以從存放庫設定頁面啟用或停用秘密推送保護。
如前所述,啟用所選存放庫的進階安全性時,會自動啟動秘密掃描存放庫掃描。
設定相依性掃描
相依性掃描是管線型的掃描工具。 結果會按存放庫彙總。 建議您將相依性掃描工作新增至您想要掃描的所有管線。
提示
如需最精確的掃描結果,請務必遵循建置步驟和/或管線的套件還原步驟來新增相依性掃描工作,以建置您想要掃描的程序代碼。
將進階安全性相依性掃描工作 (AdvancedSecurity-Dependency-Scanning@1) 直接新增至 YAML 管線檔案,或從工作助理選取進階安全性相依性掃描工作。
設定程式碼掃描
程式碼掃描也是管線型的掃描工具,其中結果會按存放庫彙總。
提示
建議您將程式代碼掃描工作新增至主要生產管線的個別複製管線,或建立新的管線。 這是因為程式代碼掃描可能是更耗時的建置工作。
依下列順序新增工作:
- 進階安全性初始化 CodeQL (AdvancedSecurity-Codeql-Init@1)
- 您的自訂建置步驟
- 進階安全性執行 CodeQL 分析 (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 的程式代碼QL 分析目前為 Beta 版。 在 Beta 版期間,這些語言的分析將比對其他人的 CodeQL 分析更全面。
使用 java
來分析以 Java、Kotlin 或兩者撰寫的程式代碼。
使用 javascript
來分析以 JavaScript、TypeScript 或兩者撰寫的程式代碼。
如果需要指定的 cpp, java, csharp
語言或 swift
自定義建置步驟。
設定提取要求批注
針對相依性掃描和程式代碼掃描,批注會自動針對提取要求進行設定,其中建置驗證原則會套用至管線中的相依性掃描和/或程式代碼掃描工作。 如需設定組建驗證原則的詳細資訊,請參閱 建置驗證。
提取要求批注也需要預設分支和目標分支上的進階安全性掃描,然後才掃描您的來源 (提取要求) 分支。 如需解決提取要求分支警示的詳細資訊,請參閱 管理提取要求的 相依性掃描警示和 管理提取要求的程式代碼掃描警示。
如果基於任何原因,您需要停用進階安全性,則下次重新啟用存放庫的 [進階安全性] 時,將會保留 [進階安全性] 索引卷標的任何警示和狀態。