Azure DevOps中‘Block secrets on push’功能未按预期工作求助
问题描述
我在Azure DevOps (ADO)中启用了Settings > Advanced Security下的‘Block secrets on push’功能,但推送包含密钥的代码、提交相关拉取请求时完全没有被拦截。请问有什么排查或解决办法?
重现步骤
- 进入ADO仓库的Settings > Advanced Security页面,确认‘Block secrets on push’复选框已勾选
- 在代码中添加密钥内容
- 将更改推送到仓库
- 创建包含该更改的拉取请求
排查与解决建议
检查密钥检测规则覆盖
该功能依赖ADO内置的密钥扫描规则,若你使用的是自定义格式的密钥,可能未被内置规则识别。前往Settings > Repository > Policies > Secret scanning,查看已启用的规则列表,确认目标密钥类型在其中。如果是自定义密钥,需手动添加对应的扫描规则。确认策略的分支适用范围
进入Settings > Repository > Policies,找到秘密扫描相关的策略,检查分支匹配模式是否覆盖了你推送的目标分支。比如部分策略可能仅应用于main/master分支,若你推送到其他分支则不会触发拦截。验证用户权限是否豁免
若你的账号拥有项目管理员、仓库管理员权限,可能自带策略豁免权,推送操作会跳过拦截。可以切换到普通开发者账号测试,或者在策略设置中取消对应权限的豁免配置。检查扫描策略的执行模式
确保策略设置为“阻止推送”而非仅“发送提醒”。在Secret scanning策略页面,查看“Action”选项是否选择了Block,若为Alert则只会生成告警,不会拦截推送。确认组织层级的设置覆盖
ADO的秘密扫描功能支持组织层级和仓库层级配置,组织级设置可能覆盖仓库级。进入Organization settings > Security > Secret scanning,检查组织级策略是否允许仓库启用拦截,是否存在全局的豁免规则。排查特殊Git操作
使用git push --force、历史重写(如git rebase)等操作可能绕过策略检查。尝试使用普通推送操作测试,同时在策略设置中确认是否开启了对强制推送的拦截。
内容的提问来源于stack exchange,提问作者Louis XIV

