跳到主要内容

网络与安全设置

CORS

要配置 CORS (跨域资源共享),必须安装以下依赖

pip install apache_superset[cors]

可以在 superset_config.py 中指定以下键来配置 CORS

  • ENABLE_CORS: 必须设置为 True 以启用 CORS
  • CORS_OPTIONS: 传递给 Flask-CORS 的选项 (文档)

HTTP 头部

请注意,Superset 捆绑了 flask-talisman,它自称为一个小型 Flask 扩展,用于设置 HTTP 头部,有助于防范一些常见的 Web 应用程序安全问题。

仪表板和图表的 HTML 嵌入

有两种嵌入仪表板的方法:使用 SDK 或嵌入直接链接。请注意,在后一种情况下,知道链接的任何人都可以访问该仪表板。

这首先通过更改 flask-talisman 的内容安全策略 (CSP) 来允许某些域显示 Superset 内容。然后,仪表板可以被设置为公开可访问,即**绕过身份验证**。一旦公开,仪表板的 URL 就可以添加到另一个网站的 HTML 代码中的 iframe 中。

更改 flask-talisman CSP

config.py 中完整的 TALISMAN_CONFIG 部分添加到 superset_config.py 中,并包含 frame-ancestors 部分

TALISMAN_ENABLED = True
TALISMAN_CONFIG = {
"content_security_policy": {
...
"frame-ancestors": ["*.my-domain.com", "*.another-domain.com"],
...

重启 Superset 以使此配置更改生效。

公开仪表板

  1. 'DASHBOARD_RBAC': True 功能标志 添加到 superset_config.py
  2. 按照此处的说明,将 Public 角色添加到您的仪表板中

嵌入公共仪表板

现在任何人都可以直接访问仪表板的 URL。您可以像这样将其嵌入到 iframe 中

<iframe
width="600"
height="400"
seamless
frameBorder="0"
scrolling="no"
src="https://superset.my-domain.com/superset/dashboard/10/?standalone=1&height=400"
>
</iframe>

嵌入图表

图表的嵌入代码可以通过进入图表的编辑视图,然后点击右上角的 ... > 共享 > 嵌入代码 来生成。

通过 SDK 启用嵌入

点击仪表板概览页面右上角 EDIT DASHBOARD 旁边的 ... 应该会弹出一个下拉菜单,其中包含“嵌入仪表板”的条目。

要启用此条目,请将以下行添加到 .env 文件中

SUPERSET_FEATURE_EMBEDDED_SUPERSET=true

CSRF 设置

同样,flask-wtf 用于管理一些 CSRF 配置。如果您需要豁免某些端点免受 CSRF 保护(例如,如果您正在运行自定义的身份验证回发端点),您可以将这些端点添加到 WTF_CSRF_EXEMPT_LIST 中。

SSH 隧道

  1. 开启功能标志

    • SSH_TUNNELING 更改为 True
    • 如果您想在建立隧道时增加安全性,我们允许用户在此处覆盖 SSHTunnelManager
    • 您还可以设置 SSH_TUNNEL_LOCAL_BIND_ADDRESS,这是隧道将在您的 VPC 上可访问的主机地址
  2. 创建启用 SSH 隧道的数据库

    • 启用功能标志后,您现在应该会看到 SSH 隧道开关。
    • 点击开关启用 SSH 隧道,并相应地添加您的凭据。
      • Superset 允许两种不同类型的身份验证(基本身份验证 + 私钥)。这些凭据应由您的服务提供商提供。
  3. 验证数据流

    • 启用 SSH 隧道后,前往 SQL Lab 并编写查询以验证数据是否正常流动。

域名分片

注意

从 Superset 5.0.0 开始,域名分片已被弃用,并将在 Superset 6.0.0 中移除。请启用 HTTP2 以保持每个域更多的开放连接。

Chrome 每次允许每个域最多 6 个开放连接。当仪表板中有超过 6 个切片时,许多获取请求会排队等待下一个可用套接字。PR 5039 为 Superset 添加了域名分片功能,此功能仅通过配置启用(默认情况下 Superset 不允许跨域请求)。

在您的 superset_config.py 文件中添加以下设置

  • SUPERSET_WEBSERVER_DOMAINS: 域名分片功能允许的主机名列表。

请将您的域名分片创建为主域的子域,以便在新域上正常进行授权。例如

  • SUPERSET_WEBSERVER_DOMAINS=['superset-1.mydomain.com','superset-2.mydomain.com','superset-3.mydomain.com','superset-4.mydomain.com']

如果域名分片不是主域的子域,则在您的 superset_config.py 文件中添加以下设置。

  • SESSION_COOKIE_DOMAIN = '.mydomain.com'

中间件

Superset 允许您添加自己的中间件。要添加您自己的中间件,请更新 superset_config.py 中的 ADDITIONAL_MIDDLEWARE 键。ADDITIONAL_MIDDLEWARE 应该是一个包含您的附加中间件类的列表。

例如,要在 Nginx 等代理服务器后面使用 AUTH_REMOTE_USER,您必须添加一个简单的中间件类,将 HTTP_X_PROXY_REMOTE_USER 的值(或来自代理的任何其他自定义头部)添加到 Gunicorn 的 REMOTE_USER 环境变量中。