Azure DevOps 使用服務主體配置自托管代理 (Self-hosted Agent) 配置指南

Azure DevOps 使用服務主體配置自托管代理配置指南

    • 1. 概述
    • 2. 在 Azure AD 中創建服務主體 (SP)
    • 3. 授予 Azure DevOps 權限
      • 3.1. 組織層級:用戶身份與訪問級別
      • 3.2. 組織層級:Agent pools管理員
      • 3.3. 在 Linux VM 上安裝和配置代理
      • 3.4. 啟動并設置為系統服務
      • 3.5. 授予 Azure 資源權限 (可選,用于部署)

版本: 1.0
最后更新: 2025年7月24日

1. 概述

本文檔旨在提供一個安全、可靠且可重復的詳細步驟,指導如何在 Linux 環境下,使用服務主體 (Service Principal) 作為身份驗證方式,成功配置和運行一個 Azure DevOps 自托管代理。

好對于在生產環境或任何需要高安全性的自動化場景中,最佳實踐是使用服務主體 (Service Principal, SP)

服務主體 (SP) 是 Azure 中一個獨立的、非人類的身份標識,專為應用程序、服務或自動化工具(比如我們的 self-hosted agent)設計。

  • 適用場景:
    • 生產環境部署: 這是絕對的首選。當你的代理需要訪問 Azure 資源(例如部署到虛擬機、應用服務或管理資源)時,使用 SP 可以實現最小權限原則。
    • 自動化腳本/無人值守環境: 任何不需要人工干預的場景,SP 都是最理想的選擇,因為它不需要用戶賬戶的生命周期管理。
    • 需要精細化權限控制: 你可以為一個 SP 分配一個非常具體且權限受限的角色 (Role),比如只允許它對某個特定資源組有“參與者(Contributor)”權限。
驗證方式核心場景安全性推薦指數 (生產環境)
Service Principal (SP)生產環境、自動化、需要訪問 Azure 資源最高★★★★★ (強烈推薦)
Personal Access Token (PAT)快速測試、個人項目、無云資源訪問較低★★☆☆☆ (不推薦用于生產)
Device code flow交互式設置、需要 MFA 的環境較高★★★☆☆ (適用于手動設置階段)
Integrated (Windows)內網域環境、與本地 AD 集成較高★★★★☆ (特定企業場景下推薦)

2. 在 Azure AD 中創建服務主體 (SP)

  1. 登錄 Azure 門戶,點擊側邊欄Entra ID,選擇應用注冊,注冊創建一個新的服務主體。
    在這里插入圖片描述
    在這里插入圖片描述

  2. 復制客戶端ID和租戶ID,點擊客戶端憑據添加新的Secret。

在這里插入圖片描述
在這里插入圖片描述

  1. 立即復制并永久保存Secret的值,往后不再出現
    在這里插入圖片描述

3. 授予 Azure DevOps 權限

3.1. 組織層級:用戶身份與訪問級別

  1. 進入 Azure DevOps Organization Settings -> General -> Users
  2. 確認你的 服務主體 已經出現在用戶列表中,添加進入,分配Project Contributor權限。
  3. Access Level,將其修改為 Basic。這是它能執行有效操作的基礎。
    在這里插入圖片描述

3.2. 組織層級:Agent pools管理員

  1. 回到 Organization Settings -> Pipelines -> Agent pools
  2. 選擇你要使用的代理池(例如 Default)。
  3. 進入 Security 標簽頁。
  4. 點擊 Add +,搜索并添加你的 SP,并授予其 Administrator 角色。
    • 目的:這是我們最關鍵一步。授予代理程序本身注冊、連接和管理自己的權限。
      在這里插入圖片描述

打開Third-party application access via OAuth,它控制了 是否允許 OAuth 授權的 AAD 應用(包括你創建的 Service Principal)訪問 Azure DevOps API

在這里插入圖片描述

3.3. 在 Linux VM 上安裝和配置代理

  1. 在Project層級或者組織層級,選擇Agent Pool,添加New Agent,點擊Download下載vsts-agent-linux-x64-4.258.1.tar.gz包,傳輸到Linux主機上
    在這里插入圖片描述

  2. 創建目錄并解壓代理文件。

mkdir myagent && cd myagent
tar zxvf {your_path}/vsts-agent-linux-x64-4.258.1.tar.gz
./config.sh

跟隨以下步驟輸入

Enter (Y/N) Accept the Team Explorer Everywhere license agreement now? (press enter for N) > Y>> Connect:Enter server URL > https://dev.azure.com/{yourorganization}Enter authentication type (press enter for PAT) > spEnter Client(App) ID > {your_Client(App) ID}Enter Tenant ID > {your_Tenant ID}Enter Client secret > ****************************************Connecting to server ...>> Register Agent:Enter agent pool (press enter for default) >default
Enter agent name (press enter for MyProxy) >MyProxy
Scanning for tool capabilities.Connecting to the server.Successfully added the agentTesting agent connection.Enter work folder (press enter for _work) >/home/MyProxy/myagent/_work

3.4. 啟動并設置為系統服務

  1. 安裝服務:為了安全,建議指定一個普通用戶(需提前創建)來運行該服務。如果使用當前用戶,請確保其權限適當。
    # 推薦:以指定用戶身份安裝
    sudo ./svc.sh install [username] # 或者,以 root 身份安裝(不推薦)
    # sudo ./svc.sh install
    
  2. 啟動服務
    sudo ./svc.sh start
    
  3. 檢查狀態
    sudo ./svc.sh status
    
    此時,回到 DevOps 界面,代理狀態應為綠色的 Online
    在這里插入圖片描述

3.5. 授予 Azure 資源權限 (可選,用于部署)

如果你的流水線需要部署 Azure 資源,請確保 SP 擁有對應資源的 IAM 權限。

  1. Azure 門戶中,導航到具體的目標資源(如 App Service, 虛擬機)。
  2. 進入 Access control (IAM)
  3. 點擊 Add role assignment,將你的 SP 添加到具有最小必要權限的角色中(如 Website Contributor)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90479.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java學習第六十四部分——Nginx

目錄 一、前言提要 二、核心特點 三、核心作用 四、架構優勢 五、應用場景 六、常用命令 七、性能對比——Nginx vs Apache 八、典型用戶 九、配置示例 十、Java應用需配合的配置 十一、性能優化策略 十二、常見問題排查 十三、文件結構配置 十四、總結歸納概述 …

幾個常用的Oxygen編輯器插件

Oxygen XML Editor是羅馬尼亞的SyncroSoft公司開發的結構化文檔編輯和發布軟件。 除了Oxygen編輯器帶的功能,它還提供了豐富的插件來提供額外的功能來輔助資料開發人員更高效率、更低成本地開發結構化資料。 本文介紹幾個比較常用和有用的插件。 - 1 - Git Clie…

基于springboot的軟件缺陷管理跟蹤平臺

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了六年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

【LINUX】Centos 9使用nmcli更改IP

1. 查看連接名稱 nmcli connection show輸出類似: NAME UUID TYPE DEVICE Wired connection 1 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet enp1s02. 修改 IP 地址(以靜態 IP 為例&#xf…

ConvMixer模型:純卷積為何能夠媲美Transformer架構?深入淺出原理與Pytorch代碼逐行講解實現

ConvMixer 是一個簡潔的視覺模型,僅使用標準的卷積層,達到與基于自注意力機制的視覺 Transformer(ViT)相似的性能,由此證明純卷積架構依然很強大。核心原理:極簡的卷積設計:它摒棄了復雜的自注意…

教程:如何通過代理服務在國內高效使用 Claude API 并集成到 VSCode

對于許多開發者來說,直接訪問 Anthropic 的 Claude API 存在網絡障礙。本文將介紹一個第三方代理服務,幫助你穩定、高效地利用 Claude 的強大能力,并將其無縫集成到你的開發工作流中。 一、服務介紹 我們使用的是 open.xiaojingai.com 這個…

從零開始:Vue 3 + TypeScript 項目創建全記錄

一次完整的現代前端項目搭建經歷,踩坑與收獲并存 ?? 前言 最近創建了一個新的 Vue 3 項目,整個過程中遇到了不少有趣的選擇和決策點。作為一個技術復盤,我想把這次經歷分享出來,希望能幫助到其他開發者,特別是那些剛接觸 Vue 3 生態的朋友們。 ??? 項目初始化:選擇…

[spring6: @EnableWebSocket]-源碼解析

注解 EnableWebSocket Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Documented Import(DelegatingWebSocketConfiguration.class) public interface EnableWebSocket {}DelegatingWebSocketConfiguration Configuration(proxyBeanMethods false) public …

Nacos 封裝與 Docker 部署實踐

Nacos 封裝與 Docker 部署指南 0 準備工作 核心概念? 命名空間:用于隔離不同環境(如 dev、test、prod)或業務線,默認命名空間為public。? 數據 ID:配置集的唯一標識,命名規則推薦為{服務名}-{profile}.{擴…

Vue2——4

組件的樣式沖突 scoped默認情況:寫在組件中的樣式會 全局生效 → 因此很容易造成多個組件之間的樣式沖突問題。1. 全局樣式: 默認組件中的樣式會作用到全局2. 局部樣式: 可以給組件加上 scoped 屬性, 可以讓樣式只作用于當前組件原理:當前組件內標簽都被…

30天打好數模基礎-邏輯回歸講解

案例代碼實現一、代碼說明本案例針對信用卡欺詐檢測二分類問題,完整實現邏輯回歸的數據生成→預處理→模型訓練→評估→閾值調整→決策邊界可視化流程。數據生成:模擬1000條交易數據,其中欺詐樣本占20%(類不平衡)&…

CDH yarn 重啟后RM兩個備

yarn rmadmin -transitionToActive --forcemanual rm1 cd /opt/cloudera/parcels/CDH/lib/zookeeper/bin/ ./zkCli.sh -server IT-CDH-Node01:2181 查看是否存在殘留的ActiveBreadCrumb節點 ls /yarn-leader-election/yarnRM #若輸出只有[ActiveBreadCrumb](正常應…

HTML5音頻技術及Web Audio API深入解析

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;音頻處理在IT行業中的多媒體、游戲開發、在線教育和音樂制作等應用領域中至關重要。本文詳細探討了HTML5中的 <audio> 標簽和Web Audio API等技術&#xff0c;涉及音頻的嵌入、播放、控制以及優化。特別…

每日面試題13:垃圾回收器什么時候STW?

STW是什么&#xff1f;——深入理解JVM垃圾回收中的"Stop-The-World"在Java程序運行過程中&#xff0c;JVM會通過垃圾回收&#xff08;GC&#xff09;自動管理內存&#xff0c;釋放不再使用的對象以騰出空間。但你是否遇到過程序突然卡頓的情況&#xff1f;這可能與G…

【系統全面】常用SQL語句大全

一、基本查詢語句 查詢所有數據&#xff1a; SELECT * FROM 表名;查詢特定列&#xff1a; SELECT 列名1, 列名2 FROM 表名;條件查詢&#xff1a; SELECT * FROM 表名 WHERE 條件;模糊查詢&#xff1a; SELECT * FROM 表名 WHERE 列名 LIKE 模式%;排序查詢&#xff1a; SELECT *…

Spring之SSM整合流程詳解(Spring+SpringMVC+MyBatis)

Spring之SSM整合流程詳解-SpringSpringMVCMyBatis一、SSM整合的核心思路二、環境準備與依賴配置2.1 開發環境2.2 Maven依賴&#xff08;pom.xml&#xff09;三、整合配置文件&#xff08;核心步驟&#xff09;3.1 數據庫配置&#xff08;db.properties&#xff09;3.2 Spring核…

C++STL系列之set和map系列

前言 set和map都是關聯式容器&#xff0c;stl中樹形結構的有四種&#xff0c;set&#xff0c;map&#xff0c;multiset,multimap.本次主要是講他們的模擬實現和用法。 一、set、map、multiset、multimap set set的中文意思是集合&#xff0c;集合就說明不允許重復的元素 1……

Linux 磁盤掛載,查看uuid

lsblk -o NAME,FSTYPE,LABEL,UUID,MOUNTPOINT,SIZEsudo ntfsfix /dev/nvme1n1p1sudo mount -o remount,rw /dev/nvme1n1p1 /media/yake/Datasudo ntfsfix /dev/sda2sudo mount -o remount,rw /dev/sda2 /media/yake/MyData

【AJAX】XMLHttpRequest、Promise 與 axios的關系

目錄 一、AJAX原理 —— XMLHttpRequest 1.1 使用XMLHttpRequest 二、 XMLHttpRequest - 查詢參數 &#xff08;就是往服務器后面拼接要查詢的字符串&#xff09; 三、 地區查詢 四、 XMLHttpRequest - 數據提交 五、 認識Promise 5.1 為什么 JavaScript 需要異步&#…

C++中的stack和queue

C中的stack和queue 前言 這一節的內容對于stack和queue的使用介紹會比較少&#xff0c;主要是因為stack和queue的使用十分簡單&#xff0c;而且他們的功能主要也是在做題的時候才會顯現。這一欄目暫時不會寫關于做題的內容&#xff0c;后續我會額外開一個做題日記的欄目的。 這…