[ 英语 | 印度尼西亚语 | 俄语 ]

安全头

安全头是 HTTP 头,可用于通过限制现代浏览器能够运行的内容来提高 Web 应用程序的安全性。

在 OpenStack-Ansible 中,安全头在 HAProxy 中实现,因为所有公共端点都位于其后。

以下头默认在实现 TLS 的所有 HAProxy 接口上启用,但仅针对 Horizon 服务。安全头可以实现于其他 HAProxy 服务,但只有浏览器使用的服务才会利用这些头。

HTTP 严格传输安全

OpenStack TLS 安全指南》建议所有生产部署都使用 HTTP 严格传输安全 (HSTS)。

设计上,一旦设置,此头很难禁用。建议在测试期间将时间设置为 1 天,测试完成后再将时间增加到 1 年。

要将默认最大年龄更改为 1 天,请在 /etc/openstack_deploy/user_variables.yml 文件中覆盖变量 haproxy_security_headers_max_age

haproxy_security_headers_max_age: 86400

如果您希望您的域名包含在浏览器内置的 HSTS 预加载列表中,在提交添加到 HSTS 预加载列表的请求之前,您必须将 preload 标记添加到您的响应头中。 preload 标记表明您同意将您的站点包含在 HSTS 预加载列表的维护者。

- "http-response set-header Strict-Transport-Security \"max-age={{ haproxy_security_headers_max_age }}; includeSubDomains; preload;\""

X-Content-Type-Options

X-Content-Type-Options 头可防止 MIME 类型嗅探。

可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。

Referrer Policy

Referrer-Policy 头控制随请求发送多少引用者信息。它默认为 same-origin,这不会为跨域请求发送源路径。

可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。

Permission Policy

Permissions-Policy 头允许您选择性地启用、禁用或修改浏览器功能和 API 的使用,以前称为 Feature Policy。

默认情况下,此头设置为阻止访问除以下来自同一源的功能外所有功能:全屏、剪贴板读取、剪贴板写入和空间导航。

可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。

内容安全策略 (CSP)

Content-Security-Policy 头允许您控制浏览器允许为给定页面加载哪些资源,这有助于缓解跨站脚本 (XSS) 和数据注入攻击的风险。

默认情况下,内容安全策略 (CSP) 启用一组最小的资源以允许 Horizon 正常工作,其中包括访问 Nova 控制台。如果您需要访问其他资源,可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers_csp 变量来设置这些资源。

仅报告

实施 CSP 可能会导致内容损坏,如果浏览器被阻止访问某些资源,因此建议在测试 CSP 时使用 Content-Security-Policy-Report-Only 头代替 Content-Security-Policy,这会将 CSP 违规行为报告到浏览器控制台,但不强制执行策略。

要通过在 /etc/openstack_deploy/user_variables.yml 文件中将 haproxy_security_headers_csp_report_only 变量覆盖为 true 来设置 CSP 策略为仅报告

haproxy_security_headers_csp_report_only: true

报告违规行为

建议您监控生产中的 CSP 尝试违规行为,这可以通过设置 report-urireport-to 标记来实现。

联合登录

在使用联合登录时,您需要通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_horizon_csp 变量来覆盖默认内容安全策略,以允许访问您的授权服务器。

haproxy_horizon_csp: >
  http-response set-header Content-Security-Policy "
  default-src 'self';
  frame-ancestors 'self';
  form-action 'self' {{ external_lb_vip_address }}:5000 <YOUR-AUTHORISATION-SERVER-ORIGIN>;
  upgrade-insecure-requests;
  style-src 'self' 'unsafe-inline';
  script-src 'self' 'unsafe-inline' 'unsafe-eval';
  child-src 'self' {{ external_lb_vip_address }}:{{ nova_spice_html5proxy_base_port }} {{ external_lb_vip_address }}:{{ nova_novncproxy_port }} {{ external_lb_vip_address }}:{{ nova_serialconsoleproxy_port }};
  frame-src 'self' {{ external_lb_vip_address }}:{{ nova_spice_html5proxy_base_port }} {{ external_lb_vip_address }}:{{ nova_novncproxy_port }} {{ external_lb_vip_address }}:{{ nova_serialconsoleproxy_port }};
  "

也可以为 Skyline 设置特定的安全头。

haproxy_skyline_csp: ...