使用GCP托管SSL运行Rundeck时出现内容安全策略错误
问题根源
- 核心问题在于Rundeck实例内部以HTTP协议运行,而外部通过GCP负载均衡器的HTTPS访问。Rundeck默认生成的Content Security Policy(CSP)中
form-action 'self'指令对应的是内部HTTP地址,和外部用户访问的HTTPS域名不匹配,浏览器因此判定表单提交目标违反CSP规则。 - 负载均衡器仅做SSL终止,将HTTPS请求转成HTTP转发给后端Rundeck,但Rundeck无法感知外部的HTTPS域名,导致输出的CSP头与实际访问环境不兼容。
解决步骤
配置Rundeck识别外部HTTPS域名
编辑Rundeck的核心配置文件/etc/rundeck/rundeck-config.properties,添加或修改以下配置项:grails.serverURL=https://sub.domain.xxx server.useForwardHeaders=truegrails.serverURL:设置为外部用户实际访问的HTTPS完整地址,确保Rundeck生成的所有链接和CSP头都使用该域名。server.useForwardHeaders=true:让Rundeck识别负载均衡器传递的X-Forwarded-*系列请求头,从而正确判断外部访问的协议和域名。
配置负载均衡器传递转发头
在GCP负载均衡器的后端服务配置中,开启"转发客户端IP",并确保传递以下自定义请求头给后端Rundeck实例:X-Forwarded-Proto: httpsX-Forwarded-Host: sub.domain.xxx
这一步是让Rundeck能准确感知外部的访问协议和域名,避免生成错误的CSP规则。
重启Rundeck服务
执行命令使配置生效:sudo systemctl restart rundeckd验证修复效果
访问Rundeck登录页面,打开浏览器开发者工具的"网络"标签,查看登录页面的响应头,确认Content-Security-Policy中的form-action指令包含正确的HTTPS域名,此时表单提交将不再触发CSP错误。
内容的提问来源于stack exchange,提问作者devops on the road
相关产品推荐
相关产品推荐

