如何创建持有Azure DevOps Git只读凭据的Service Account
Azure DevOps 配置Git仓库只读Bot服务账号操作指南
Azure DevOps没有单独设置非用户类服务账号的专属入口,别在用户列表里翻找专门的Bot创建选项了,以下两种官方方案都能实现需求,全程不占用付费用户席位,权限粒度可精确控制:
方案1:Azure AD服务主体(推荐,适用全场景自动化)
这是微软官方首推的非用户身份访问方案,不绑定任何真实员工账号,不会因为人员离职导致权限失效,支持跨仓库授权,适合需要访问多个代码库的Bot使用。
操作步骤:
- 打开对接Azure DevOps的Azure AD控制台,进入「应用注册」页面新建注册,名称填你的Bot标识(比如
prod-git-readonly-bot),受支持账户类型选「仅本组织目录内账户」,重定向URI留空直接提交。注册完成后保存好页面显示的客户端ID、租户ID。 - 进入刚创建的应用详情页,左侧选「证书和密码」,新建客户端密码,按需选择过期时间(最长可选2年,到期前轮换即可),密码生成后立刻复制保存,退出页面后无法再次查看。
- 切回Azure DevOps组织设置页,打开「用户」列表点「添加用户」,搜索框直接输入刚才注册的应用名称,选中匹配到的服务主体,访问级别选「利益干系人」即可——利益干系人级别默认无代码库访问权限,完全不占用基础/高级付费席位,没有额外成本。
- 进入需要授权的目标Git仓库,打开「项目设置-仓库-选中对应仓库-权限」页,点添加成员搜索刚才的服务主体,给它只开「读取」权限,其余所有代码提交、分支管理、策略配置相关的权限全部保持「未设置」即可,未设置的权限默认不开放。
- 验证使用:Git操作走HTTPS协议,clone时用户名填之前记录的客户端ID,密码填生成的客户端密钥,就可以正常拉取代码,推送操作会直接被拒绝。参考clone命令:
git clone https://dev.azure.com/你的组织名/你的项目名/_git/目标仓库名
方案2:仓库部署密钥(仅单仓库只读场景,配置最简)
如果你的Bot只需要拉取单个仓库的代码,不需要访问Azure DevOps其他任何资源,用部署密钥是最省事的选择,不需要额外配置账号体系。
操作步骤:
- 在运行Bot的机器上生成SSH密钥对,执行命令:
ssh-keygen -t rsa -b 4096 -C "git-readonly-bot",一路回车即可,不要给私钥设置密码,生成后得到id_rsa(私钥,存到Bot的认证配置里)和id_rsa.pub(公钥)两个文件。 - 进入目标Git仓库的设置页,找到「部署密钥」选项点添加,名称填Bot的标识,把
id_rsa.pub里的全部内容粘贴到公钥输入框,一定不要勾选「授予写入权限」的选项,保存即可。 - 验证使用:Bot端用SSH格式的仓库地址拉取代码即可,参考clone命令:
git clone git@ssh.dev.azure.com:v3/你的组织名/你的项目名/目标仓库名
这种方式生成的密钥默认只有对应仓库的只读拉取权限,无法推送代码,也不能访问组织下其他任何资源,权限边界最清晰。
避坑提示
- 不要用真实员工账号生成PAT(个人访问令牌)给Bot用,一旦员工离职账号被禁用,Bot服务会直接中断,而且审计日志无法区分操作是员工本人还是Bot发起的,合规风险高。
- 不要给服务主体直接分配「项目读取者」「参与者」这类内置角色,遵循最小权限原则,只开代码读取的必要权限即可,不要给工作项、流水线、测试计划等无关资源的访问权。
- 如果是给Azure DevOps流水线本身用的服务账号,优先用系统自动生成的工作负载身份联合,不需要手动管理密钥,安全性更高。
内容的提问来源于stack exchange,提问作者A X
相关产品推荐
相关产品推荐

