一尘不染

Ansible jenkins_plugin模块返回“ HTTP错误403:请求中未包含有效碎屑”

jenkins

我将Ansible(v 2.8)用作Packer模板背后的供应商,以为Jenkins主节点构建AMI。对于以前的版本,剧本已成功通过。但是,从Jenkins
2.176.3版开始,该jenkins_plugin模块已抛出:

HTTP错误403:请求中未包含有效的屑

我已经检索了面包屑并将其注册在变量中。我尝试将其传递给jenkins_pluginhttp_agent字段,但这不起作用。我尝试使用attributes,但这也无济于事。除非我缺少令人难以置信的基本知识,否则我将束手无策。

- name:               Get Jenkins Crumb
  uri:
    force_basic_auth: yes
    url_username:     ****
    url_password:     ****
    url:              http://localhost:8080/crumbIssuer/api/json
    return_content:   yes
  register:           jenkins_crumb
  until:              jenkins_crumb.content.find('Please wait while Jenkins is getting ready') == -1
  retries:            10
  delay:              5

- name:               Install plugin
  jenkins_plugin:
    name:             "{{ item }}"
    version:          latest
    force_basic_auth: yes
    url_username:     ****
    url_password:     ****
    http_agent:       "Jenkins-Crumb:{{ jenkins_crumb.json.crumb }}"
  with_items:         "{{ jenkins_plugins }}"

我希望安装插件和一个愉快构建的AMI。我得到的是“ HTTP错误403:请求中未包含有效碎屑”,并且Packer构建失败。


阅读 568

收藏
2020-07-25

共1个答案

一尘不染

看起来像2.176 LTS版本中的碎屑发行者所做的更改 强制将初始令牌生成调用的Web会话ID连同碎屑一起包含在使用所述碎屑的后续调用中。

CSRF令牌(小块)现在仅对创建它们的Web会话有效,以限制攻击者获取它们的影响。使用/ crumbIssuer / api
URL获取垃圾的脚本现在将无法执行受CSRF保护的操作,除非脚本在后续请求中保留了Web会话ID。

除了建议您暂时禁用CSRF之外,同一文档还建议您只能禁用新功能,而不能禁用整个CSRF,这应允许您的打包程序/可写程序按照以前的方式完成。

要禁用此改进,可以将系统属性hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID设置为true。

编辑:

/etc/default/jenkins在我自己的剧本(Ansible 2.8.4,Ubuntu 18.04,OpenJDK
11.0.4)中添加以下行可清除CSRF问题。

JAVA_ARGS="$JAVA_ARGS -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true"

在工具维护人员赶上API更改之前,可能是一个足够好的拐杖。

2020-07-25